linux/drivers/acpi
Rafael J. Wysocki 9cd031441a ACPI / ACPICA: Fix global lock acquisition
There are two problems with the ACPICA's current implementation of
the global lock acquisition.  First, acpi_ev_global_lock_handler(),
which in fact is an interface to the outside of the kernel, doesn't
validate its input, so it only works correctly if the other side
(i.e. the ACPI firmware) is fully specification-compliant (as far
as the global lock is concerned).  Unfortunately, that's known not
to be the case on some systems (i.e. we get spurious global lock
signaling interrupts without the pending flag set on some systems).
Second, acpi_ev_global_lock_handler() attempts to acquire the global
lock on behalf of a thread waiting for it without checking if there
actually is such a thread.  Both of these shortcomings need to be
addressed to prevent all possible race conditions from happening.

Rework acpi_ev_global_lock_handler() so that it doesn't try to
acquire the global lock and make it signal the availability of the
global lock to the waiting thread instead.  Make sure that the
availability of the global lock can only be signaled when there
is a thread waiting for it and that it can't be signaled more than
once in a row (to keep acpi_gbl_global_lock_semaphore in balance).

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
2011-01-07 01:15:55 -05:00
..
acpica ACPI / ACPICA: Fix global lock acquisition 2011-01-07 01:15:55 -05:00
apei ACPI/HEST: adjust section selection 2010-12-11 02:01:48 -05:00
ac.c ACPI ac: update AC status upon sysfs query 2010-12-09 15:33:08 -05:00
acpi_memhotplug.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
acpi_pad.c Merge branch 'x86-idle-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-10-21 13:45:38 -07:00
atomicio.c ACPI, APEI, Fix acpi_pre_map() return value 2010-09-29 14:02:16 -04:00
battery.c Revert "ACPI battery: update status upon sysfs query" 2010-12-24 21:43:16 -05:00
blacklist.c Merge branch 'msi-dmi' into release 2010-10-08 22:37:46 -04:00
bus.c ACPI: install ACPI table handler before any dynamic tables being loaded 2010-10-26 04:55:29 -04:00
button.c ACPI/PNP: A HID value of an object never changes -> make it const 2010-10-01 19:28:51 -04:00
cm_sbs.c
container.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
debugfs.c ACPI: debugfs custom_method open to non-root 2010-11-13 09:52:16 -08:00
dock.c Merge branch 'misc' into release 2010-10-26 14:51:00 -04:00
ec_sys.c llseek: automatically add .llseek fop 2010-10-15 15:53:27 +02:00
ec.c ACPI: EC: Add another dmi match entry for MSI hardware 2010-12-09 17:08:46 -05:00
event.c llseek: automatically add .llseek fop 2010-10-15 15:53:27 +02:00
fan.c ACPI fan: remove deprecated procfs I/F 2010-10-15 22:02:47 -04:00
glue.c ACPI: Add the check of ADR flag in course of finding ACPI handle for PCI device 2010-07-26 22:32:13 -04:00
hed.c ACPI Hardware Error Device (PNP0C33) support 2010-05-19 22:40:24 -04:00
internal.h Merge branch 'linus' into release 2010-08-15 01:06:31 -04:00
Kconfig Merge branch 'misc' into release 2010-10-26 14:51:00 -04:00
Makefile Merge branch 'linus' into release 2010-08-15 01:06:31 -04:00
numa.c gcc-4.6: ACPI: fix unused but set variables in ACPI 2010-08-15 00:53:08 -04:00
osl.c Merge branches 'bugzilla-15418', 'bugzilla-21722', 'bugzilla-22932', 'misc-2.6.37' and 'osi-regression' into release 2010-12-11 02:02:02 -05:00
pci_bind.c PCI / ACPI / PM: Platform support for PCI PME wake-up 2010-02-22 16:21:02 -08:00
pci_irq.c ACPI: remove unused declaration of proc_fs.h 2010-10-15 22:03:36 -04:00
pci_link.c ACPI: remove unused declaration of proc_fs.h 2010-10-15 22:03:36 -04:00
pci_root.c ACPI: remove unused declaration of proc_fs.h 2010-10-15 22:03:36 -04:00
pci_slot.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
power_meter.c power_meter: acpi_device_class "power_meter_resource" too long 2010-05-06 02:38:24 -04:00
power.c ACPI / PM: Do not refcount power resources that can't be turned on 2010-12-01 16:53:39 -05:00
proc.c ACPI: remove deprecated ACPI procfs I/F 2010-08-15 00:27:51 -04:00
processor_core.c Merge branch 'pdc-regression' into release 2010-10-08 22:35:02 -04:00
processor_driver.c Merge branch 'misc' into release 2010-10-26 14:51:00 -04:00
processor_idle.c Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2010-10-26 17:28:37 -07:00
processor_perflib.c ACPI: Fix typos 2010-09-28 21:38:19 -04:00
processor_thermal.c ACPI thermal: remove two unused functions 2010-12-11 02:01:47 -05:00
processor_throttling.c ACPI processor: make /proc/acpi/processor/*/throttle depends on CONFIG_ACPI_PROCFS 2010-10-15 22:03:17 -04:00
reboot.c
sbs.c ACPI ac/battery/sbs: sysfs I/F always built in, procfs I/F disabled by default 2010-10-15 22:02:38 -04:00
sbshc.c sbshc: acpi_device_class "smbus_host_controller" too long 2010-05-06 02:38:25 -04:00
sbshc.h
scan.c ACPI: Execute _PRW for devices reported as inactive or not present 2010-12-17 16:39:11 -05:00
sleep.c Merge branch 'bugzilla-23002' into release 2010-12-13 22:40:54 -05:00
sleep.h ACPI: static sleep_states[] and acpi_gts_bfs_check 2010-10-19 13:44:37 -04:00
sysfs.c ACPI: fix build warnings resulting from merge window conflict 2010-09-28 21:38:01 -04:00
tables.c ACPI: delete the "acpi=ht" boot option 2010-03-14 20:58:38 -04:00
thermal.c ACPI thermal: remove deprecated procfs I/F 2010-10-15 22:03:01 -04:00
utils.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
video_detect.c ACPI video: fix a poor warning message 2010-09-28 21:38:01 -04:00
video.c ACPI video: remove deprecated procfs I/F 2010-10-15 22:03:08 -04:00
wakeup.c Merge branch 'acpica-gpe' into release 2010-08-15 00:25:40 -04:00