Re: [GIT PULL] More ACPI updates for v4.10-rc1

From: Rafael J. Wysocki
Date: Wed Jan 04 2017 - 19:07:12 EST


On Thu, Jan 5, 2017 at 12:46 AM, Linus Torvalds
<torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
> On Wed, Jan 4, 2017 at 3:19 PM, Linus Torvalds
> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
>>
>> This is my normal desktop, so pretty plain HW.
>>
>> It doesn't happen on my laptop, so it's obviously hw-related or
>> possibly config-related.
>
> .. and here's the stack trace.

Thanks!

I reproduced it too in the meantime (but on an older system I rarely use).

> Side note: should the '\n' be deleted? ACPI_ERROR() seems to add that
> silly "where it happened" at the end, but due to the '\n' we end up
> with two lines...
>
> Linus
>
> ---
>
> ACPI Warning: Table ffffffffb0e6c0a0, Validation count is zero
> before decrement
> (20160930/tbutils-456)
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 0 at drivers/acpi/acpica/tbutils.c:457
> acpi_tb_put_table+0x4e/0x62
> Modules linked in:
> CPU: 0 PID: 0 Comm: swapper Not tainted
> 4.10.0-rc2-00103-g4cf184638bcf-dirty #1
> Hardware name: System manufacturer System Product Name/Z170-K, BIOS
> 1803 05/06/2016
> Call Trace:
> acpi_tb_put_table+0x4e/0x62
> acpi_put_table+0x40/0x4d
> detect_intel_iommu+0x9d/0xed
> pci_iommu_alloc+0x50/0x6c
> mem_init+0xf/0x8a
> start_kernel+0x21e/0x454
> x86_64_start_reservations+0x24/0x26
> x86_64_start_kernel+0x182/0x193
> start_cpu+0x14/0x14
> ---[ end trace 5e897a808e950ddc ]---

And the attached thing makes it go away for me.

I'll post a proper patch shorlty.

Cheers,
Rafael
---
drivers/iommu/dmar.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

Index: linux-pm/drivers/iommu/dmar.c
===================================================================
--- linux-pm.orig/drivers/iommu/dmar.c
+++ linux-pm/drivers/iommu/dmar.c
@@ -903,8 +903,10 @@ int __init detect_intel_iommu(void)
x86_init.iommu.iommu_init = intel_iommu_init;
#endif

- acpi_put_table(dmar_tbl);
- dmar_tbl = NULL;
+ if (dmar_tbl) {
+ acpi_put_table(dmar_tbl);
+ dmar_tbl = NULL;
+ }
up_write(&dmar_global_lock);

return ret ? 1 : -ENODEV;