Re: [RESEND v1 net-next 4/5] stmmac: intel: add support for multi-vector msi and msi-x
From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-03-16 21:33:24
Also in:
linux-arm-kernel, lkml
On Tue, 16 Mar 2021 20:18:22 +0800 Voon Weifeng wrote:
From: Ong Boon Leong <redacted> Intel mgbe controller supports multi-vector interrupts: msi_rx_vec 0,2,4,6,8,10,12,14 msi_tx_vec 1,3,5,7,9,11,13,15 msi_sfty_ue_vec 26 msi_sfty_ce_vec 27 msi_lpi_vec 28 msi_mac_vec 29 During probe(), the driver will starts with request allocation for multi-vector interrupts. If it fails, then it will automatically fallback to request allocation for single interrupts. Signed-off-by: Ong Boon Leong <redacted> Co-developed-by: Voon Weifeng <redacted> Signed-off-by: Voon Weifeng <redacted>
quoted hunk ↗ jump to hunk
+ +static int stmmac_config_multi_msi(struct pci_dev *pdev, + struct plat_stmmacenet_data *plat, + struct stmmac_resources *res) +{ + int ret; + int i; + + ret = pci_alloc_irq_vectors(pdev, 2, STMMAC_MSI_VEC_MAX, + PCI_IRQ_MSI | PCI_IRQ_MSIX); + if (ret < 0) { + dev_info(&pdev->dev, "%s: multi MSI enablement failed\n", + __func__); + return ret; + } + + if (plat->msi_rx_base_vec >= STMMAC_MSI_VEC_MAX || + plat->msi_tx_base_vec >= STMMAC_MSI_VEC_MAX) { + dev_info(&pdev->dev, "%s: Invalid RX & TX vector defined\n", + __func__); + return -1;
free_irq_vectors? Or move the check before alloc if possible.
+ }
quoted hunk ↗ jump to hunk
@@ -699,6 +786,19 @@ static int intel_eth_pci_probe(struct pci_dev *pdev, writel(tx_lpi_usec, res.addr + GMAC_1US_TIC_COUNTER); } + ret = stmmac_config_multi_msi(pdev, plat, &res); + if (!ret) + goto msi_done;
Please don't use gotos where an if statement would do perfectly well.
quoted hunk ↗ jump to hunk
+ ret = stmmac_config_single_msi(pdev, plat, &res); + if (ret) { + dev_err(&pdev->dev, "%s: ERROR: failed to enable IRQ\n", + __func__); + return ret;
return? isn't there some cleanup that needs to happen before exiting?
quoted hunk ↗ jump to hunk
+ } + +msi_done: + ret = stmmac_dvr_probe(&pdev->dev, plat, &res); if (ret) { pci_free_irq_vectors(pdev);