]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/iommu/amd_iommu_init.c
Merge tag 'acpi-extra-4.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[mirror_ubuntu-zesty-kernel.git] / drivers / iommu / amd_iommu_init.c
index 157e93421fb81667c21acc43aaa790f092595395..6799cf9713f77f460f990e6bc0f38b31422c0745 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/amd-iommu.h>
 #include <linux/export.h>
 #include <linux/iommu.h>
+#include <linux/kmemleak.h>
 #include <asm/pci-direct.h>
 #include <asm/iommu.h>
 #include <asm/gart.h>
@@ -2090,6 +2091,7 @@ static struct syscore_ops amd_iommu_syscore_ops = {
 
 static void __init free_on_init_error(void)
 {
+       kmemleak_free(irq_lookup_table);
        free_pages((unsigned long)irq_lookup_table,
                   get_order(rlookup_table_size));
 
@@ -2207,14 +2209,13 @@ static void __init free_dma_resources(void)
 static int __init early_amd_iommu_init(void)
 {
        struct acpi_table_header *ivrs_base;
-       acpi_size ivrs_size;
        acpi_status status;
        int i, remap_cache_sz, ret = 0;
 
        if (!amd_iommu_detected)
                return -ENODEV;
 
-       status = acpi_get_table_with_size("IVRS", 0, &ivrs_base, &ivrs_size);
+       status = acpi_get_table("IVRS", 0, &ivrs_base);
        if (status == AE_NOT_FOUND)
                return -ENODEV;
        else if (ACPI_FAILURE(status)) {
@@ -2321,6 +2322,8 @@ static int __init early_amd_iommu_init(void)
                irq_lookup_table = (void *)__get_free_pages(
                                GFP_KERNEL | __GFP_ZERO,
                                get_order(rlookup_table_size));
+               kmemleak_alloc(irq_lookup_table, rlookup_table_size,
+                              1, GFP_KERNEL);
                if (!irq_lookup_table)
                        goto out;
        }
@@ -2334,7 +2337,7 @@ static int __init early_amd_iommu_init(void)
 
 out:
        /* Don't leak any ACPI memory */
-       early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size);
+       acpi_put_table(ivrs_base);
        ivrs_base = NULL;
 
        return ret;
@@ -2358,10 +2361,9 @@ out:
 static bool detect_ivrs(void)
 {
        struct acpi_table_header *ivrs_base;
-       acpi_size ivrs_size;
        acpi_status status;
 
-       status = acpi_get_table_with_size("IVRS", 0, &ivrs_base, &ivrs_size);
+       status = acpi_get_table("IVRS", 0, &ivrs_base);
        if (status == AE_NOT_FOUND)
                return false;
        else if (ACPI_FAILURE(status)) {
@@ -2370,7 +2372,7 @@ static bool detect_ivrs(void)
                return false;
        }
 
-       early_acpi_os_unmap_memory((char __iomem *)ivrs_base, ivrs_size);
+       acpi_put_table(ivrs_base);
 
        /* Make sure ACS will be enabled during PCI probe */
        pci_request_acs();