linux/drivers/pci/hotplug
Kenji Kaneshige c6b069e946 pciehp: Fix interrupt event handlig
Current pciehp implementation disables and re-enables hotplug interrupts
in its interrupt handler. This operation might be intend to guarantee
that interrupts for the events newly occured during previous events are
being handled will be successfully generated. But current implementaion
has the following prolems.

  - Current interrupt service routin clears status changes without
    waiting command completion. Because of this, events might not be
    cleared properly.
  - Current interrupt service routine clears status changes caused by
    disabling or enabling hotplug interrupts itself. This will lose new
    events that occurs during previous interrupts are being handled.
  - Current implementation doesn't have any serialization mechanism
    between the code to wait for command completion and the interrupt
    handler that clears the command completion events caused by itself.
    There is clearly race conditions between them, and it may cause
    the problem that waiting for command completion doesn't work for
    example.

To fix those problems, this patch stops disabling/re-enabling hotplug
interrupts in interrupt service routine. Instead of this, this patch
re-inspects Slot Status register after clearing what is presumed to
be the last bending interrupt in order to guarantee that all interrupt
events are serviced.

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by:  Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2008-04-25 14:38:57 -07:00
..
acpi_pcihp.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
acpiphp_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
acpiphp_glue.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
acpiphp_ibm.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
acpiphp.h PCI: hotplug: acpiphp: Remove unused variable from acpiphp 2008-02-01 15:04:20 -08:00
cpci_hotplug_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
cpci_hotplug_pci.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
cpci_hotplug.h [PATCH] PCI Hotplug: CPCI update 2005-05-17 14:31:11 -07:00
cpcihp_generic.c PCI Hotplug: make cpcihp driver use modern apis 2008-04-20 21:46:56 -07:00
cpcihp_zt5550.c PCI: ZT5550 CPCI Hotplug driver fix 2007-05-02 19:02:40 -07:00
cpcihp_zt5550.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cpqphp_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
cpqphp_ctrl.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
cpqphp_nvram.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
cpqphp_nvram.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cpqphp_pci.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
cpqphp_sysfs.c [PATCH] mark struct file_operations const 5 2007-02-12 09:48:45 -08:00
cpqphp.h PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
fakephp.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
ibmphp_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
ibmphp_ebda.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
ibmphp_hpc.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
ibmphp_pci.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
ibmphp_res.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
ibmphp.h PCI Hotplug: move pci_hotplug.h to include/linux/ 2006-10-18 11:36:12 -07:00
Kconfig PCI Hotplug: the ibm driver is not dependant on PCI_LEGACY 2008-04-20 21:46:57 -07:00
Makefile PCI: hotplug: Link fakephp last 2008-02-01 15:04:20 -08:00
pci_hotplug_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
pciehp_core.c pciehp: fix slot name 2008-04-25 14:38:38 -07:00
pciehp_ctrl.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
pciehp_hpc.c pciehp: Fix interrupt event handlig 2008-04-25 14:38:57 -07:00
pciehp_pci.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
pciehp.h pciehp: Fix interrupt event handlig 2008-04-25 14:38:57 -07:00
pcihp_skeleton.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
rpadlpar_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
rpadlpar_sysfs.c Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
rpadlpar.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rpaphp_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
rpaphp_pci.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
rpaphp_slot.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
rpaphp.h pci hotplug: fix rpaphp directory naming 2008-02-01 15:04:22 -08:00
sgi_hotplug.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
shpchp_core.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
shpchp_ctrl.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
shpchp_hpc.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
shpchp_pci.c PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00
shpchp_sysfs.c SHPCHP: fix __must_check warnings 2006-09-26 17:43:53 -07:00
shpchp.h PCI: replace remaining __FUNCTION__ occurrences 2008-04-20 21:47:09 -07:00