• K
    pciehp: Fix interrupt event handlig · c6b069e9
    Kenji Kaneshige 提交于
    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: NKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
    Signed-off-by: NKristen Carlson Accardi <kristen.c.accardi@intel.com>
    Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
    c6b069e9
pciehp_hpc.c 31.6 KB