Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17a51f12 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Tejun Heo
Browse files

ahci: only try to use multi-MSI mode if there is more than 1 port



We should only try to allocate multiple MSI or MSI-X vectors if the device
actually has multiple ports.  Otherwise pci_alloc_irq_vectors will return
a single vector due to n_ports = 1, in which case we shouldn't set the
AHCI_HFLAG_MULTI_MSI flag.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Fixes: 0b9e2988 ("ahci: use pci_alloc_irq_vectors")
Reported-by: default avatarEmmanuel Benisty <benisty.e@gmail.com>
Tested-by: default avatarEmmanuel Benisty <benisty.e@gmail.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 1001354c
Loading
Loading
Loading
Loading
+17 −14
Original line number Diff line number Diff line
@@ -1418,6 +1418,7 @@ static int ahci_init_msi(struct pci_dev *pdev, unsigned int n_ports,
	 * Message mode could be enforced. In this case assume that advantage
	 * of multipe MSIs is negated and use single MSI mode instead.
	 */
	if (n_ports > 1) {
		nvec = pci_alloc_irq_vectors(pdev, n_ports, INT_MAX,
				PCI_IRQ_MSIX | PCI_IRQ_MSI);
		if (nvec > 0) {
@@ -1428,12 +1429,14 @@ static int ahci_init_msi(struct pci_dev *pdev, unsigned int n_ports,
			}

			/*
		 * Fallback to single MSI mode if the controller enforced MRSM
		 * mode.
			 * Fallback to single MSI mode if the controller
			 * enforced MRSM mode.
			 */
		printk(KERN_INFO "ahci: MRSM is on, fallback to single MSI\n");
			printk(KERN_INFO
				"ahci: MRSM is on, fallback to single MSI\n");
			pci_free_irq_vectors(pdev);
		}
	}

	/*
	 * -ENOSPC indicated we don't have enough vectors.  Don't bother trying