Re: [net-next PATCH v3 2/9] octeontx2-pf: RVU representor driver

From: Simon Horman
Date: Wed May 01 2024 - 12:08:38 EST


On Sun, Apr 28, 2024 at 04:23:05PM +0530, Geetha sowjanya wrote:
> This patch adds basic driver for the RVU representor.
> Driver on probe does pci specific initialization and does hw
> resources configuration.
> Introduces RVU_ESWITCH kernel config to enable/disable
> this driver. Representor and NIC shares the code but representors
> netdev support subset of NIC functionality. Hence "otx2_rep_dev"
> api helps to skip the features initialization that are not supported
> by the representors.
>
> Signed-off-by: Geetha sowjanya <gakula@xxxxxxxxxxx>

..

> +static int rvu_rep_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> +{
> + struct device *dev = &pdev->dev;
> + struct otx2_nic *priv;
> + struct otx2_hw *hw;
> + int err;
> +
> + err = pcim_enable_device(pdev);
> + if (err) {
> + dev_err(dev, "Failed to enable PCI device\n");
> + return err;
> + }
> +
> + err = pci_request_regions(pdev, DRV_NAME);
> + if (err) {
> + dev_err(dev, "PCI request regions failed 0x%x\n", err);
> + return err;
> + }
> +
> + err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(48));
> + if (err) {
> + dev_err(dev, "DMA mask config failed, abort\n");
> + goto err_release_regions;
> + }
> +
> + pci_set_master(pdev);
> +
> + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
> + if (!priv)
> + goto err_release_regions;

Hi Geetha,

This goto will result in the function returning err.
But err is 0 here. Perhaps it should be set to -ENOMEM?

Flagged by Smatch.

> +
> + pci_set_drvdata(pdev, priv);
> + priv->pdev = pdev;
> + priv->dev = dev;
> + priv->flags |= OTX2_FLAG_INTF_DOWN;
> + priv->flags |= OTX2_FLAG_REP_MODE_ENABLED;
> +
> + hw = &priv->hw;
> + hw->pdev = pdev;
> + hw->max_queues = OTX2_MAX_CQ_CNT;
> + hw->rbuf_len = OTX2_DEFAULT_RBUF_LEN;
> + hw->xqe_size = 128;
> +
> + err = otx2_init_rsrc(pdev, priv);
> + if (err)
> + goto err_release_regions;
> +
> + err = rvu_get_rep_cnt(priv);
> + if (err)
> + goto err_detach_rsrc;
> +
> + err = rvu_rep_rsrc_init(priv);
> + if (err)
> + goto err_detach_rsrc;
> +
> + return 0;
> +
> +err_detach_rsrc:
> + if (priv->hw.lmt_info)
> + free_percpu(priv->hw.lmt_info);
> + if (test_bit(CN10K_LMTST, &priv->hw.cap_flag))
> + qmem_free(priv->dev, priv->dync_lmt);
> + otx2_detach_resources(&priv->mbox);
> + otx2_disable_mbox_intr(priv);
> + otx2_pfaf_mbox_destroy(priv);
> + pci_free_irq_vectors(pdev);
> +err_release_regions:
> + pci_set_drvdata(pdev, NULL);
> + pci_release_regions(pdev);
> + return err;
> +}

..