• Rongguang Wei's avatar
    PCI: pciehp: Cancel bringup sequence if card is not present · e8afd0d9
    Rongguang Wei authored
    If a PCIe hotplug slot has an Attention Button, the normal hot-add flow is:
    
      - Slot is empty and slot power is off
      - User inserts card in slot and presses Attention Button
      - OS blinks Power Indicator for 5 seconds
      - After 5 seconds, OS turns on Power Indicator, turns on slot power, and
        enumerates the device
    
    Previously, if a user pressed the Attention Button on an *empty* slot,
    pciehp logged the following messages and blinked the Power Indicator
    until a second button press:
    
      [0.000] pciehp: Button press: will power on in 5 sec
      [0.001] # Power Indicator starts blinking
      [5.001] # 5 second timeout; slot is empty, so we should cancel the
                request to power on and turn off Power Indicator
    
      [7.000] # Power Indicator still blinking
      [8.000] # possible card insertion
      [9.000] pciehp: Button press: canceling request to power on
    
    The first button press incorrectly left the slot in BLINKINGON_STATE, so
    the second was interpreted as a "cancel power on" event regardless of
    whether a card was present.
    
    If the slot is empty, turn off the Power Indicator and return from
    BLINKINGON_STATE to OFF_STATE after 5 seconds, effectively canceling the
    request to power on.  Putting the slot in OFF_STATE also means the second
    button press will correctly request a slot power on if the slot is
    occupied.
    
    [bhelgaas: commit log]
    Link: https://lore.kernel.org/r/20230512021518.336460-1-clementwei90@163.com
    Fixes: d331710e ("PCI: pciehp: Become resilient to missed events")
    Suggested-by: default avatarLukas Wunner <lukas@wunner.de>
    Signed-off-by: default avatarRongguang Wei <weirongguang@kylinos.cn>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarLukas Wunner <lukas@wunner.de>
    e8afd0d9
pciehp_ctrl.c 10.9 KB