Skip to content
  • Mika Westerberg's avatar
    PCI: pciehp: Fix race condition handling surprise link down · 49902239
    Mika Westerberg authored
    A surprise link down may retrain very quickly causing the same slot
    generate a link up event before handling the link down event completes.
    
    Since the link is active, the power off work queued from the first link
    down will cause a second down event when power is disabled. However, the
    link up event sets the slot state to POWERON_STATE before the event to
    handle this is enqueued, making the second down event believe it needs to
    do something.
    
    This creates constant link up and down event cycle.
    
    To prevent this it is better to handle each event at the time in order it
    occurred, so change the driver to use ordered workqueue instead.
    
    A normal device hotplug triggers two events (presense detect and link up)
    that are already handled properly in the driver but we currently log an
    error if we find an existing device in the slot. Since this is not an error
    change the log level to be debug instead to avoid scaring users.
    
    This is based on the original work by Ashok Raj.
    
    Link: https://patchwork.kernel.org/patch/9469023
    
    
    Suggested-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    49902239