linux/drivers/acpi
Rafael J. Wysocki 202317a573 ACPI / scan: Add acpi_device objects for all device nodes in the namespace
Modify the ACPI namespace scanning code to register a struct
acpi_device object for every namespace node representing a device,
processor and so on, even if the device represented by that namespace
node is reported to be not present and not functional by _STA.

There are multiple reasons to do that.  First of all, it avoids
quite a lot of overhead when struct acpi_device objects are
deleted every time acpi_bus_trim() is run and then added again
by a subsequent acpi_bus_scan() for the same scope, although the
namespace objects they correspond to stay in memory all the time
(which always is the case on a vast majority of systems).

Second, it will allow user space to see that there are namespace
nodes representing devices that are not present at the moment and may
be added to the system.  It will also allow user space to evaluate
_SUN for those nodes to check what physical slots the "missing"
devices may be put into and it will make sense to add a sysfs
attribute for _STA evaluation after this change (that will be
useful for thermal management on some systems).

Next, it will help to consolidate the ACPI hotplug handling among
subsystems by making it possible to store hotplug-related information
in struct acpi_device objects in a standard common way.

Finally, it will help to avoid a race condition related to the
deletion of ACPI namespace nodes.  Namely, namespace nodes may be
deleted as a result of a table unload triggered by _EJ0 or _DCK.
If a hotplug notification for one of those nodes is triggered
right before the deletion and it executes a hotplug callback
via acpi_hotplug_execute(), the ACPI handle passed to that
callback may be stale when the callback actually runs.  One way
to work around that is to always pass struct acpi_device pointers
to hotplug callbacks after doing a get_device() on the objects in
question which eliminates the use-after-free possibility (the ACPI
handles in those objects are invalidated by acpi_scan_drop_device(),
so they will trigger ACPICA errors on attempts to use them).

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
2013-11-22 21:54:37 +01:00
..
acpica Merge branch 'acpica' into acpi-hotplug 2013-11-22 21:48:20 +01:00
apei PCI changes for the v3.13 merge window: 2013-11-14 14:02:00 +09:00
ac.c ACPI / AC: Remove struct acpi_device pointer from struct acpi_ac 2013-11-14 23:23:14 +01:00
acpi_cmos_rtc.c ACPI: Add CMOS RTC Operation Region handler support 2013-06-27 21:35:37 +02:00
acpi_extlog.c ACPI, x86: Extended error log driver for x86 platform 2013-10-23 10:09:07 -07:00
acpi_ipmi.c ACPI / IPMI: Cleanup coding styles 2013-09-30 19:46:13 +02:00
acpi_lpss.c Merge branch 'acpi-lpss' 2013-11-16 15:45:13 +01:00
acpi_memhotplug.c Merge branch 'acpi-hotplug' 2013-10-28 01:12:41 +01:00
acpi_pad.c PTR_RET() is a weird name, and led to some confusing usage. We ended 2013-09-04 17:31:11 -07:00
acpi_platform.c ACPI / driver core: Store an ACPI device pointer in struct acpi_dev_node 2013-11-14 23:14:43 +01:00
acpi_processor.c Merge branch 'acpi-processor' 2013-10-28 01:11:24 +01:00
battery.c ACPI / Battery: Remove battery's proc directory 2013-10-12 00:19:44 +02:00
bgrt.c acpi: bgrt: fix build error due to attribute change 2013-08-22 08:34:39 -07:00
blacklist.c Merge branch 'acpi-config' 2013-11-16 15:45:00 +01:00
bus.c PCI changes for the v3.13 merge window: 2013-11-14 14:02:00 +09:00
button.c ACPI / button: Using input_set_capability() to mark device's event capability 2013-09-25 17:11:57 +02:00
container.c Merge branch 'acpi-assorted' 2013-04-28 01:54:08 +02:00
custom_method.c The sweeping change is to make add_taint() explicitly indicate whether to disable 2013-02-25 15:41:43 -08:00
debugfs.c
device_pm.c ACPI / scan: Add acpi_device objects for all device nodes in the namespace 2013-11-22 21:54:37 +01:00
dock.c ACPI / scan: Add acpi_device objects for all device nodes in the namespace 2013-11-22 21:54:37 +01:00
ec_sys.c ACPI / EC: access user space with get_user()/put_user() 2013-06-19 23:29:20 +02:00
ec.c Merge branch 'acpi-ec' 2013-11-19 01:06:06 +01:00
event.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-11-19 15:50:47 -08:00
fan.c ACP / fan: trivial style cleanup 2013-09-24 01:40:38 +02:00
glue.c ACPI / bind: Use (put|get)_device() on ACPI device objects too 2013-11-14 23:18:32 +01:00
hed.c ACPI: Remove useless type argument of driver .remove() operation 2013-01-26 00:37:24 +01:00
internal.h ACPI / scan: Add acpi_device objects for all device nodes in the namespace 2013-11-22 21:54:37 +01:00
Kconfig Merge branch 'acpi-config' 2013-11-16 15:45:00 +01:00
Makefile ACPI and power management updates for 3.13-rc1 2013-11-14 13:41:48 +09:00
numa.c ACPI / mm: use NUMA_NO_NODE 2013-09-24 01:40:38 +02:00
nvs.c
osl.c ACPI / scan: Define non-empty device removal handler 2013-11-22 21:52:12 +01:00
pci_irq.c PCI/ACPI: Don't cache _PRT, and don't associate them with bus numbers 2013-02-16 11:58:34 -07:00
pci_link.c ACPI: Set length even for TYPE_END_TAG acpi resource 2013-03-24 01:00:38 +01:00
pci_root.c ACPI / scan: Add acpi_device objects for all device nodes in the namespace 2013-11-22 21:54:37 +01:00
pci_slot.c ACPI / PCI: Make bus registration and unregistration symmetric 2013-07-23 03:58:42 +02:00
power.c ACPI / power: Drop automaitc resume of power resource dependent devices 2013-10-16 23:05:42 +02:00
proc.c ACPI / proc: Remove alarm proc file 2013-10-12 00:19:45 +02:00
processor_core.c ACPI / processor: Introduce apic_id in struct processor to save parsed APIC id 2013-09-24 01:39:39 +02:00
processor_driver.c ACPI / processor: Do not request ACPI cpufreq module directly 2013-10-30 00:00:30 +01:00
processor_idle.c ACPI and power management updates for 3.13-rc1 2013-11-14 13:41:48 +09:00
processor_perflib.c ACPI / processor: Do not request ACPI cpufreq module directly 2013-10-30 00:00:30 +01:00
processor_thermal.c ACPI / processor: Remove acpi_processor_get_limit_info() 2013-08-13 12:11:22 +02:00
processor_throttling.c ACPI: suppress compiler warnings in processor_throttling.c 2013-03-25 00:05:48 +01:00
reboot.c
resource.c ACPI: introduce helper function acpi_has_method() 2013-07-15 01:33:10 +02:00
sbs.c ACPI / SBS: Remove SBS's proc directory 2013-10-12 00:19:44 +02:00
sbshc.c ACPI: Remove useless type argument of driver .remove() operation 2013-01-26 00:37:24 +01:00
sbshc.h
scan.c ACPI / scan: Add acpi_device objects for all device nodes in the namespace 2013-11-22 21:54:37 +01:00
sleep.c Merge branch 'acpi-assorted' 2013-08-27 01:29:04 +02:00
sleep.h ACPI: Drop power resources driver 2013-01-17 14:11:06 +01:00
sysfs.c Merge branch 'acpi-assorted' 2013-10-28 01:20:24 +01:00
tables.c ACPICA: Cleanup table handler naming conflicts. 2013-01-11 13:10:16 +01:00
thermal.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux 2013-11-14 14:42:31 +09:00
utils.c ACPI: Fix spelling mistake in error messages 2013-10-30 00:02:42 +01:00
video_detect.c ACPI / video: Add Lenovo IdeaPad Yoga 13 to acpi video detect blacklist 2013-10-16 01:27:33 +02:00
video.c ACPI / video: clean up DMI table for initial black screen problem 2013-11-15 23:23:17 +01:00
wakeup.c