linux_dsm_epyc7002/include/acpi
Rafael J. Wysocki c50f13c672 ACPICA: Save current masks of enabled GPEs after enable register writes
There is a race condition between acpi_hw_disable_all_gpes() or
acpi_enable_all_wakeup_gpes() and acpi_ev_asynch_enable_gpe() such
that if the latter wins the race, it may mistakenly enable a GPE
disabled by the former.  This may lead to premature system wakeups
during system suspend and potentially to more serious consequences.

The source of the problem is how acpi_hw_low_set_gpe() works when
passed ACPI_GPE_CONDITIONAL_ENABLE as the second argument.  In that
case, the GPE will be enabled if the corresponding bit is set in the
enable_for_run mask of the GPE enable register containing that bit.
However, acpi_hw_disable_all_gpes() and acpi_enable_all_wakeup_gpes()
don't modify the enable_for_run masks of GPE registers when writing
to them.  In consequence, if acpi_ev_asynch_enable_gpe(), which
eventually calls acpi_hw_low_set_gpe() with the second argument
equal to ACPI_GPE_CONDITIONAL_ENABLE, is executed in parallel with
one of these functions, it may reverse changes made by them.

To fix the problem, introduce a new enable_mask field in struct
acpi_gpe_register_info in which to store the current mask of
enabled GPEs and modify acpi_hw_low_set_gpe() to take this
mask into account instead of enable_for_run when its second
argument is equal to ACPI_GPE_CONDITIONAL_ENABLE.  Also modify
the low-level routines called by acpi_hw_disable_all_gpes(),
acpi_enable_all_wakeup_gpes() and acpi_enable_all_runtime_gpes()
to update the enable_mask masks of GPE registers after all
(successful) writes to those registers.

Acked-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2014-12-01 23:50:16 +01:00
..
platform Merge branch 'acpi-headers' 2014-07-27 23:52:05 +02:00
acbuffer.h ACPICA: iASL: Add support for to_PLD macro. 2014-11-28 00:00:52 +01:00
acconfig.h ACPICA: Disassembler: Add support for the ToUUID opererator (macro). 2014-07-31 00:50:22 +02:00
acexcep.h ACPICA: Revert "Headers: Deploy #pragma pack (push) and (pop)." 2014-03-18 01:53:45 +01:00
acnames.h ACPICA: Add string for _DDN method name. 2014-10-21 00:39:39 +02:00
acoutput.h ACPICA: Revert "Headers: Deploy #pragma pack (push) and (pop)." 2014-03-18 01:53:45 +01:00
acpi_bus.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux 2014-10-24 11:21:43 -07:00
acpi_drivers.h ACPI / PCI: Stub out pci_acpi_crs_quirks() and make it x86 specific 2014-05-07 01:09:47 +02:00
acpi_io.h ACPI: Clean up acpi_os_map/unmap_memory() to eliminate __iomem. 2014-05-27 18:13:08 +02:00
acpi_numa.h ACPI / numa: Make __acpi_map_pxm_to_node(), acpi_get_pxm() static 2014-02-03 10:39:38 -07:00
acpi.h ACPICA: Linux headers: Add <acpi/platform/aclinuxex.h> 2014-05-27 18:13:07 +02:00
acpiosxf.h ACPICA: OSL: Add portable file IO to improve portability 2014-07-08 14:22:25 +02:00
acpixf.h ACPICA: Update version to 20141107. 2014-11-28 00:00:53 +01:00
acrestyp.h ACPICA: Revert "Headers: Deploy #pragma pack (push) and (pop)." 2014-03-18 01:53:45 +01:00
actbl1.h ACPICA: ACPI 5.1/Disassembler: Add GICC affinity subtable to SRAT table. 2014-09-03 01:17:41 +02:00
actbl2.h ACPICA: Tables: Update for DMAR table changes. 2014-07-31 00:50:23 +02:00
actbl3.h ACPICA: Headers: Add GTDT flag definitions for the timer subtable. 2014-09-03 01:17:42 +02:00
actbl.h ACPICA/ARM: ACPI 5.1: Update for FADT changes. 2014-07-31 00:50:24 +02:00
actypes.h ACPICA: Save current masks of enabled GPEs after enable register writes 2014-12-01 23:50:16 +01:00
apei.h acpi, apei, ghes: Factor out ioremap virtual memory for IRQ and NMI context. 2014-07-22 15:05:06 -07:00
button.h ACPI: make ACPI button funcs no-ops if not built in 2009-09-17 14:48:23 -07:00
ghes.h ACPICA: Restore error table definitions to reduce code differences between Linux and ACPICA upstream. 2014-06-16 22:33:50 +02:00
hed.h ACPI Hardware Error Device (PNP0C33) support 2010-05-19 22:40:24 -04:00
pdc_intel.h ACPI: Enable bit 11 in _PDC to advertise hw coord 2009-02-07 00:41:14 -05:00
processor.h ACPI / processor replace __attribute__((packed)) by __packed 2014-06-17 14:00:15 +02:00
reboot.h
video.h ACPI / i915: ignore firmware requests for backlight change 2014-07-07 23:38:05 +02:00