On Tue, 16 Mar 2021 20:18:22 +0800 Voon Weifeng wrote: > From: Ong Boon Leong <boon.leong....@intel.com> > > 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 <boon.leong....@intel.com> > Co-developed-by: Voon Weifeng <weifeng.v...@intel.com> > Signed-off-by: Voon Weifeng <weifeng.v...@intel.com>
> + > +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. > + } > @@ -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. > + 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? > + } > + > +msi_done: > + > ret = stmmac_dvr_probe(&pdev->dev, plat, &res); > if (ret) { > pci_free_irq_vectors(pdev);