PCI: pciehp: Don't enable HPIE when resuming in poll mode
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 21 Mar 2025 16:21:14 +0000 (18:21 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 21 Mar 2025 16:33:49 +0000 (11:33 -0500)
PCIe hotplug can operate in poll mode without interrupt handlers using a
polling kthread only.  eb34da60edee ("PCI: pciehp: Disable hotplug
interrupt during suspend") failed to consider that and enables HPIE
(Hot-Plug Interrupt Enable) unconditionally when resuming the Port.

Only set HPIE if non-poll mode is in use. This makes
pcie_enable_interrupt() match how pcie_enable_notification() already
handles HPIE.

Link: https://lore.kernel.org/r/20250321162114.3939-1-ilpo.jarvinen@linux.intel.com
Fixes: eb34da60edee ("PCI: pciehp: Disable hotplug interrupt during suspend")
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Lukas Wunner <lukas@wunner.de>
drivers/pci/hotplug/pciehp_hpc.c

index bb5a8d9f03ad9897c8afcc4aa63aeb69b86ac47d..28ab393af1c04be952a5417e311f969ff23a263a 100644 (file)
@@ -842,7 +842,9 @@ void pcie_enable_interrupt(struct controller *ctrl)
 {
        u16 mask;
 
-       mask = PCI_EXP_SLTCTL_HPIE | PCI_EXP_SLTCTL_DLLSCE;
+       mask = PCI_EXP_SLTCTL_DLLSCE;
+       if (!pciehp_poll_mode)
+               mask |= PCI_EXP_SLTCTL_HPIE;
        pcie_write_cmd(ctrl, mask, mask);
 }