kernel_optimize_test/include/acpi
Rafael J. Wysocki 78ea4639a7 ACPI / hotplug: Fix potential race in acpi_bus_notify()
There is a slight possibility for the ACPI device object pointed to
by adev in acpi_hotplug_notify_cb() to become invalid between the
acpi_bus_get_device() that it comes from and the subsequent dereference
of that pointer under get_device().  Namely, if acpi_scan_drop_device()
runs in parallel with acpi_hotplug_notify_cb(), acpi_device_del_work_fn()
queued up by it may delete the device object in question right after
a successful execution of acpi_bus_get_device() in acpi_bus_notify().

An analogous problem is present in acpi_bus_notify() where the device
pointer coming from acpi_bus_get_device() may become invalid before
it subsequent dereference in the "if" block.

To prevent that from happening, introduce a new function,
acpi_bus_get_acpi_device(), working analogously to acpi_bus_get_device()
except that it will grab a reference to the ACPI device object returned
by it and it will do that under the ACPICA's namespace mutex.  Then,
make both acpi_hotplug_notify_cb() and acpi_bus_notify() use
acpi_bus_get_acpi_device() instead of acpi_bus_get_device() so as to
ensure that the pointers used by them will not become stale at one
point.

In addition to that, introduce acpi_bus_put_acpi_device() as a wrapper
around put_device() to be used along with acpi_bus_get_acpi_device()
and make the (new) users of the latter use acpi_bus_put_acpi_device()
too.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
2014-02-05 17:41:18 +01:00
..
platform ACPICA: Utilities: Cleanup declarations of the acpi_gbl_debug_file global. 2014-01-08 15:31:39 +01:00
acbuffer.h ACPICA: Update ACPICA copyrights to 2013 2013-01-25 13:30:47 +01:00
acconfig.h ACPICA: Tests: Add CHECKSUM_ABORT protection for test utilities. 2013-11-21 13:47:03 +01:00
acexcep.h ACPICA: Cleanup exception codes. 2013-09-24 01:46:25 +02:00
acnames.h ACPICA: Predefine name macros: Sort list. 2013-10-30 12:24:21 +01:00
acoutput.h ACPICA: Remove unused macros, no functional change 2013-06-01 21:54:31 +02:00
acpi_bus.h ACPI / hotplug: Fix potential race in acpi_bus_notify() 2014-02-05 17:41:18 +01:00
acpi_drivers.h ACPI: Clean up inclusions of ACPI header files 2013-12-07 01:03:14 +01:00
acpi_io.h ACPI / i915: Fix incorrect <acpi/acpi.h> inclusions via <linux/acpi_io.h> 2013-12-07 01:24:33 +01:00
acpi_numa.h ACPI: Store SRAT table revision 2012-01-17 04:19:04 -05:00
acpi.h ACPICA: Update ACPICA copyrights to 2013 2013-01-25 13:30:47 +01:00
acpiosxf.h ACPI / hotplug: Consolidate deferred execution of ACPI hotplug routines 2013-11-07 19:28:48 +01:00
acpixf.h ACPICA: Introduce acpi_get_data_full() and rework acpi_get_data() 2014-02-05 17:41:16 +01:00
acrestyp.h ACPICA: Update ACPICA copyrights to 2013 2013-01-25 13:30:47 +01:00
actbl1.h ACPICA: Add helper macros to extract bus/segment numbers from HEST table. 2014-01-08 15:31:37 +01:00
actbl2.h ACPICA: Tables: Add full support for the DBG2 table. 2014-01-08 15:31:36 +01:00
actbl3.h ACPICA: Tables: Add full support for the PCCT table, update table definition. 2014-01-08 15:31:37 +01:00
actbl.h ACPICA: Back port and refine validation of the XSDT root table. 2014-01-08 15:31:36 +01:00
actypes.h ACPICA: Remove unused ACPI_FREE_BUFFER macro. No functional change. 2014-01-08 15:31:36 +01:00
apei.h module_param: make bool parameters really bool (drivers & misc) 2012-01-13 09:32:20 +10:30
button.h
ghes.h ACPI, CPER: Update cper info 2013-10-21 15:12:00 -07:00
hed.h
pdc_intel.h
processor.h ACPI / processor: Do not request ACPI cpufreq module directly 2013-10-30 00:00:30 +01:00
reboot.h
video.h Revert "ACPI / video / i915: No ACPI backlight if firmware expects Windows 8" 2013-07-26 14:59:20 +02:00