lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 356/917] qed: Dont ignore devlink allocation failures
    Date
    From: Leon Romanovsky <leonro@nvidia.com>

    [ Upstream commit e6a54d6f221301347aaf9d83bb1f23129325c1c5 ]

    devlink is a software interface that doesn't depend on any hardware
    capabilities. The failure in SW means memory issues, wrong parameters,
    programmer error e.t.c.

    Like any other such interface in the kernel, the returned status of
    devlink APIs should be checked and propagated further and not ignored.

    Fixes: 755f982bb1ff ("qed/qede: make devlink survive recovery")
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/qlogic/qede/qede_main.c | 12 +++++-------
    drivers/scsi/qedf/qedf_main.c | 2 ++
    2 files changed, 7 insertions(+), 7 deletions(-)

    diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
    index 9837bdb89cd40..ee4c3bd28a934 100644
    --- a/drivers/net/ethernet/qlogic/qede/qede_main.c
    +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
    @@ -1176,19 +1176,17 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level,
    edev->devlink = qed_ops->common->devlink_register(cdev);
    if (IS_ERR(edev->devlink)) {
    DP_NOTICE(edev, "Cannot register devlink\n");
    + rc = PTR_ERR(edev->devlink);
    edev->devlink = NULL;
    - /* Go on, we can live without devlink */
    + goto err3;
    }
    } else {
    struct net_device *ndev = pci_get_drvdata(pdev);
    + struct qed_devlink *qdl;

    edev = netdev_priv(ndev);
    -
    - if (edev->devlink) {
    - struct qed_devlink *qdl = devlink_priv(edev->devlink);
    -
    - qdl->cdev = cdev;
    - }
    + qdl = devlink_priv(edev->devlink);
    + qdl->cdev = cdev;
    edev->cdev = cdev;
    memset(&edev->stats, 0, sizeof(edev->stats));
    memcpy(&edev->dev_info, &dev_info, sizeof(dev_info));
    diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
    index 42d0d941dba5c..94ee08fab46a5 100644
    --- a/drivers/scsi/qedf/qedf_main.c
    +++ b/drivers/scsi/qedf/qedf_main.c
    @@ -3416,7 +3416,9 @@ retry_probe:
    qedf->devlink = qed_ops->common->devlink_register(qedf->cdev);
    if (IS_ERR(qedf->devlink)) {
    QEDF_ERR(&qedf->dbg_ctx, "Cannot register devlink\n");
    + rc = PTR_ERR(qedf->devlink);
    qedf->devlink = NULL;
    + goto err2;
    }
    }

    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 00:40    [W:4.045 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site