• Blazej Kucman's avatar
    PCI: pciehp: Retain Power Indicator bits for userspace indicators · 5560a612
    Blazej Kucman authored
    The sysfs "attention" file normally controls the Slot Control Attention
    Indicator with 0 (off), 1 (on), 2 (blink) settings.
    
    576243b3 ("PCI: pciehp: Allow exclusive userspace control of
    indicators") added pciehp_set_raw_indicator_status() to allow userspace to
    directly control all four bits in both the Attention Indicator and the
    Power Indicator fields via the "attention" file.
    
    This is used on Intel VMD bridges so utilities like "ledmon" can use sysfs
    "attention" to control up to 16 indicators for NVMe device RAID status.
    
    abaaac48 ("PCI: hotplug: Use FIELD_GET/PREP()") broke this by masking
    the sysfs data with PCI_EXP_SLTCTL_AIC, which discards the upper two bits
    intended for the Power Indicator Control field (PCI_EXP_SLTCTL_PIC).
    
    For NVMe devices behind an Intel VMD, ledmon settings that use the
    PCI_EXP_SLTCTL_PIC bits, i.e., ATTENTION_REBUILD (0x5), ATTENTION_LOCATE
    (0x7), ATTENTION_FAILURE (0xD), ATTENTION_OFF (0xF), no longer worked
    correctly.
    
    Mask with PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC to retain both the
    Attention Indicator and the Power Indicator bits.
    
    Fixes: abaaac48 ("PCI: hotplug: Use FIELD_GET/PREP()")
    Link: https://lore.kernel.org/r/20240722141440.7210-1-blazej.kucman@intel.comSigned-off-by: default avatarBlazej Kucman <blazej.kucman@intel.com>
    [bhelgaas: commit log]
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org	# v6.7+
    5560a612
pciehp_hpc.c 29.9 KB