Commit c0ecd638 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull PCI fixes from Bjorn Helgaas:

 - Fix a pci_intx() regression that caused driver reload to fail with
   "Resources present before probing" (Philipp Stanner)

 - Fix a pciehp regression that clobbered the upper bits of RAID status
   LEDs on NVMe devices behind an Intel VMD (Blazej Kucman)

* tag 'pci-v6.11-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci:
  PCI: pciehp: Retain Power Indicator bits for userspace indicators
  PCI: Fix devres regression in pci_intx()
parents 183d46ff 5560a612
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -485,7 +485,9 @@ int pciehp_set_raw_indicator_status(struct hotplug_slot *hotplug_slot,
	struct pci_dev *pdev = ctrl_dev(ctrl);

	pci_config_pm_runtime_get(pdev);
	pcie_write_cmd_nowait(ctrl, FIELD_PREP(PCI_EXP_SLTCTL_AIC, status),

	/* Attention and Power Indicator Control bits are supported */
	pcie_write_cmd_nowait(ctrl, FIELD_PREP(PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC, status),
			      PCI_EXP_SLTCTL_AIC | PCI_EXP_SLTCTL_PIC);
	pci_config_pm_runtime_put(pdev);
	return 0;
+8 −7
Original line number Diff line number Diff line
@@ -4477,12 +4477,6 @@ void pci_intx(struct pci_dev *pdev, int enable)
{
	u16 pci_command, new;

	/* Preserve the "hybrid" behavior for backwards compatibility */
	if (pci_is_managed(pdev)) {
		WARN_ON_ONCE(pcim_intx(pdev, enable) != 0);
		return;
	}

	pci_read_config_word(pdev, PCI_COMMAND, &pci_command);

	if (enable)
@@ -4490,9 +4484,16 @@ void pci_intx(struct pci_dev *pdev, int enable)
	else
		new = pci_command | PCI_COMMAND_INTX_DISABLE;

	if (new != pci_command)
	if (new != pci_command) {
		/* Preserve the "hybrid" behavior for backwards compatibility */
		if (pci_is_managed(pdev)) {
			WARN_ON_ONCE(pcim_intx(pdev, enable) != 0);
			return;
		}

		pci_write_config_word(pdev, PCI_COMMAND, new);
	}
}
EXPORT_SYMBOL_GPL(pci_intx);

/**