linux/drivers/acpi
Zhao Yakui 9d699ed92a ACPI: Avoid bogus EC timeout when EC is in Polling mode
When EC is in Polling mode, OS will check the EC status continually by using
the following source code:
       clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
       while (time_before(jiffies, delay)) {
               if (acpi_ec_check_status(ec, event))
       	            return 0;
               msleep(1);
       }
But msleep is realized by the function of schedule_timeout. At the same time
although one process is already waken up by some events, it won't be scheduled
immediately. So maybe there exists the following phenomena:
     a. The current jiffies is already after the predefined jiffies.
	But before timeout happens, OS has no chance to check the EC
	status again.
     b. If preemptible schedule is enabled, maybe preempt schedule will happen
	before checking loop. When the process is resumed again, maybe
	timeout already happens, which means that OS has no chance to check
	the EC status.

In such case maybe EC status is already what OS expects when timeout happens.
But OS has no chance to check the EC status and regards it as AE_TIME.

So it will be more appropriate that OS will try to check the EC status again
when timeout happens. If the EC status is what we expect, it won't be regarded
as timeout. Only when the EC status is not what we expect, it will be regarded
as timeout, which means that EC controller can't give a response in time.

http://bugzilla.kernel.org/show_bug.cgi?id=9823
http://bugzilla.kernel.org/show_bug.cgi?id=11141

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Signed-off-by: Zhang Rui  <rui.zhang@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
2008-08-15 03:13:06 +02:00
..
dispatcher ACPICA: Cleanup debug operand dump mechanism 2008-07-16 23:27:04 +02:00
events ACPI: Enhance /sys/firmware/interrupts to allow enable/disable/clear from user-space 2008-07-16 23:27:04 +02:00
executer ACPICA: Cleanup debug operand dump mechanism 2008-07-16 23:27:04 +02:00
hardware ACPI: Enhance /sys/firmware/interrupts to allow enable/disable/clear from user-space 2008-07-16 23:27:04 +02:00
namespace acpi: fix crash in core ACPI code, triggered by CONFIG_ACPI_PCI_SLOT=y 2008-07-22 00:27:48 +02:00
parser ACPICA: Eliminate acpi_native_uint type v2 2008-07-16 23:27:03 +02:00
resources ACPICA: Cleanup of _PRT parsing code 2008-07-16 23:27:04 +02:00
sleep pm: acpi pm: add DMI quirk list for ACPI 1.0 suspend ordering 2008-07-24 10:47:24 -07:00
tables Revert "Fix FADT parsing" 2008-07-18 01:42:20 +02:00
utilities acpi: fix crash in core ACPI code, triggered by CONFIG_ACPI_PCI_SLOT=y 2008-07-22 00:27:48 +02:00
ac.c ACPI: no AC status notification 2008-06-14 01:26:37 -04:00
acpi_memhotplug.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
asus_acpi.c Remove newline from the description of module parameters 2008-08-01 12:46:41 -07:00
battery.c acpi: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
bay.c APCI: revert duplicated patch 2008-07-20 17:14:57 -07:00
blacklist.c ACPI: DMI: quirk for FSC ESPRIMO Mobile V5505 2008-02-14 02:43:39 -05:00
bus.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2008-07-16 17:25:46 -07:00
button.c acpi: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
cm_sbs.c ACPI: clean up ACPI_MODULE_NAME() use 2007-02-12 22:42:12 -05:00
container.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
debug.c ACPI: add control method tracing support 2007-11-19 12:25:46 -05:00
dock.c APCI: revert duplicated patch 2008-07-20 17:14:57 -07:00
ec.c ACPI: Avoid bogus EC timeout when EC is in Polling mode 2008-08-15 03:13:06 +02:00
event.c acpi: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
fan.c driver core: fix a lot of printk usages of bus_id 2008-07-21 21:54:53 -07:00
glue.c driver core: fix a lot of printk usages of bus_id 2008-07-21 21:54:53 -07:00
Kconfig Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2008-07-16 17:25:46 -07:00
Makefile Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2008-07-16 17:25:46 -07:00
numa.c ACPICA: Update DMAR and SRAT table definitions 2008-07-16 23:27:04 +02:00
osl.c flush kacpi_notify_wq before removing notify handler 2008-04-29 02:34:42 -04:00
pci_bind.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
pci_irq.c ACPI: use dev_printk when possible 2008-07-16 23:27:07 +02:00
pci_link.c ACPI: stop complaints about interrupt link End Tags and blank IRQ descriptors 2008-07-18 01:41:49 +02:00
pci_root.c ACPI: fix section mismatch in acpi_pci_root_add 2008-02-21 02:56:32 -05:00
pci_slot.c PCI: fix bogus "'device' may be used uninitialized" warning in pci_slot 2008-07-28 15:06:00 -07:00
power.c ACPI: Introduce new device wakeup flag 'prepared' 2008-07-07 16:26:14 -07:00
processor_core.c driver core: fix a lot of printk usages of bus_id 2008-07-21 21:54:53 -07:00
processor_idle.c ACPI/CPUIDLE: prevent setting pm_idle to NULL 2008-07-28 08:31:58 -07:00
processor_perflib.c acpi cpufreq cleanup: move bailing out of function before locking the mutex 2008-07-30 09:41:43 -07:00
processor_thermal.c acpi: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
processor_throttling.c cpumask: change cpumask_of_cpu_ptr to use new cpumask_of_cpu 2008-07-26 16:40:33 +02:00
reboot.c Add the ability to reset the machine using the RESET_REG in ACPI's FADT table. 2008-07-16 23:27:08 +02:00
sbs.c acpi: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
sbshc.c ACPI: SBS: remove typo from sbchc.c 2008-03-18 05:13:14 -04:00
sbshc.h ACPI: SBS: Ignore alarms coming from unknown devices 2007-12-14 15:14:06 -05:00
scan.c driver core: fix a lot of printk usages of bus_id 2008-07-21 21:54:53 -07:00
system.c move memory_read_from_buffer() from fs.h to string.h 2008-07-24 10:47:13 -07:00
tables.c Revert "ACPI: parse 2nd MADT by default" 2007-03-30 14:16:10 -04:00
thermal.c Merge branch 'release-2.6.27' of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-acpi-2.6 2008-07-24 13:57:37 -07:00
toshiba_acpi.c toshiba_acpi: Enable autoloading 2008-03-11 13:35:08 -04:00
utils.c ACPICA: Fixes for external Reference Objects 2008-04-22 19:08:51 -04:00
video.c Merge branch 'release-2.6.27' of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-acpi-2.6 2008-07-24 13:57:37 -07:00
wmi.c ACPI: WMI: Clean up handling of spec violating data blocks 2008-03-11 17:59:05 -04:00