提交 17a51f12 编写于 作者: C Christoph Hellwig 提交者: Tejun Heo

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: NChristoph Hellwig <hch@lst.de>
Fixes: 0b9e2988 ("ahci: use pci_alloc_irq_vectors")
Reported-by: NEmmanuel Benisty <benisty.e@gmail.com>
Tested-by: NEmmanuel Benisty <benisty.e@gmail.com>
Signed-off-by: NTejun Heo <tj@kernel.org>
上级 1001354c
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册