From: Thomas Gleixner Date: Wed, 19 Mar 2025 10:56:49 +0000 (+0100) Subject: PCI/MSI: Set pci_dev:: Msi_enabled late X-Git-Tag: v6.16-rc1~186^2~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b0c44a5ec3552f89c47dac9903d99c22d796d87f;p=thirdparty%2Fkernel%2Flinux.git PCI/MSI: Set pci_dev:: Msi_enabled late The comment claiming that pci_dev::msi_enabled has to be set across setup is a leftover from ancient code versions. Nothing in the setup code requires the flag to be set anymore. Set it in the success path and remove the extra goto label. Signed-off-by: Thomas Gleixner Acked-by: Bjorn Helgaas Link: https://lore.kernel.org/all/20250319105506.383222333@linutronix.de --- diff --git a/drivers/pci/msi/msi.c b/drivers/pci/msi/msi.c index 3283baa257ed1..c26e51682a4ac 100644 --- a/drivers/pci/msi/msi.c +++ b/drivers/pci/msi/msi.c @@ -358,12 +358,8 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, if (nvec > 1 && !pci_msi_domain_supports(dev, MSI_FLAG_MULTI_PCI_MSI, ALLOW_LEGACY)) return 1; - /* - * Disable MSI during setup in the hardware, but mark it enabled - * so that setup code can evaluate it. - */ + /* Disable MSI during setup in the hardware to erase stale state */ pci_msi_set_enable(dev, 0); - dev->msi_enabled = 1; if (affd) masks = irq_create_affinity_masks(nvec, affd); @@ -371,7 +367,7 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, msi_lock_descs(&dev->dev); ret = msi_setup_msi_desc(dev, nvec, masks); if (ret) - goto fail; + goto unlock; /* All MSIs are unmasked by default; mask them all */ entry = msi_first_desc(&dev->dev, MSI_DESC_ALL); @@ -393,6 +389,7 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, goto err; /* Set MSI enabled bits */ + dev->msi_enabled = 1; pci_intx_for_msi(dev, 0); pci_msi_set_enable(dev, 1); @@ -403,8 +400,6 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, err: pci_msi_unmask(&desc, msi_multi_mask(&desc)); pci_free_msi_irqs(dev); -fail: - dev->msi_enabled = 0; unlock: msi_unlock_descs(&dev->dev); kfree(masks);