Re: 174cc7187e6f ACPICA: Tables: Back port acpi_get_table_with_size() and early_acpi_os_unmap_memory() from Linux kernel

From: Rafael J. Wysocki
Date: Sat Jan 07 2017 - 19:53:14 EST


On Sun, Jan 8, 2017 at 1:37 AM, Borislav Petkov <bp@xxxxxxxxx> wrote:
> On Sun, Jan 08, 2017 at 01:22:55AM +0100, Rafael J. Wysocki wrote:
>> Is an IVRS table actually present on this machine?
>
> Like this?
>
> [ 0.000000] ACPI: IVRS 0x000000009CFD6000 0000D0 (v02 AMD AGESA 00000001 AMD 00000000)

Yup.

So we get the table, but apparently we crash when we attempt to put it.

Let's try to check the obvious just to rule it out (see attached), but
honestly I'm not sure what's going on in there.

Thanks,
Rafael

---
drivers/iommu/amd_iommu_init.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

Index: linux-pm/drivers/iommu/amd_iommu_init.c
===================================================================
--- linux-pm.orig/drivers/iommu/amd_iommu_init.c
+++ linux-pm/drivers/iommu/amd_iommu_init.c
@@ -2337,8 +2337,10 @@ static int __init early_amd_iommu_init(v

out:
/* Don't leak any ACPI memory */
- acpi_put_table(ivrs_base);
- ivrs_base = NULL;
+ if (ivrs_base) {
+ acpi_put_table(ivrs_base);
+ ivrs_base = NULL;
+ }

return ret;
}
@@ -2372,7 +2374,8 @@ static bool detect_ivrs(void)
return false;
}

- acpi_put_table(ivrs_base);
+ if (ivrs_base)
+ acpi_put_table(ivrs_base);

/* Make sure ACS will be enabled during PCI probe */
pci_request_acs();