From: Edwin Peer <edwin.peer@broadcom.com> To: Leon Romanovsky <leon@kernel.org> Cc: "David S . Miller" <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org>, Leon Romanovsky <leonro@nvidia.com>, Alexander Lobakin <alobakin@pm.me>, Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>, Ariel Elior <aelior@marvell.com>, GR-everest-linux-l2@marvell.com, GR-QLogic-Storage-Upstream@marvell.com, Igor Russkikh <irusskikh@marvell.com>, intel-wired-lan@lists.osuosl.org, "James E.J. Bottomley" <jejb@linux.ibm.com>, Javed Hasan <jhasan@marvell.com>, Jeff Kirsher <jeffrey.t.kirsher@intel.com>, Jesse Brandeburg <jesse.brandeburg@intel.com>, Jiri Pirko <jiri@nvidia.com>, Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, linux-scsi@vger.kernel.org, "Martin K. Petersen" <martin.petersen@oracle.com>, Michael Chan <michael.chan@broadcom.com>, Michal Kalderon <michal.kalderon@marvell.com>, netdev <netdev@vger.kernel.org>, Sathya Perla <sathya.perla@broadcom.com>, Saurav Kashyap <skashyap@marvell.com>, Tony Nguyen <anthony.l.nguyen@intel.com>, Vasundhara Volam <vasundhara-v.volam@broadcom.com> Subject: Re: [PATCH net-next 1/6] bnxt_en: Check devlink allocation and registration status Date: Thu, 23 Sep 2021 14:11:40 -0700 [thread overview] Message-ID: <CAKOOJTz4A2ER8MQE1dW27Spocds09SYafjeuLcFDJ0nL6mKyOw@mail.gmail.com> (raw) In-Reply-To: <e7708737fadf4fe6f152afc76145c728c201adad.1632420430.git.leonro@nvidia.com> On Thu, Sep 23, 2021 at 11:13 AM Leon Romanovsky <leon@kernel.org> wrote: > > From: Leon Romanovsky <leonro@nvidia.com> > > 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: 4ab0c6a8ffd7 ("bnxt_en: add support to enable VF-representors") > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > --- > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 ++++- > drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 13 ++++++------- > drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 13 ------------- > 3 files changed, 10 insertions(+), 21 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > index 037767b370d5..4c483fd91dbe 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > @@ -13370,7 +13370,9 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) > } > > bnxt_inv_fw_health_reg(bp); > - bnxt_dl_register(bp); > + rc = bnxt_dl_register(bp); > + if (rc) > + goto init_err_dl; > > rc = register_netdev(dev); > if (rc) > @@ -13390,6 +13392,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) > > init_err_cleanup: > bnxt_dl_unregister(bp); > +init_err_dl: > bnxt_shutdown_tc(bp); > bnxt_clear_int_mode(bp); > > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c > index bf7d3c17049b..dc0851f709f5 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c > @@ -134,7 +134,7 @@ void bnxt_dl_fw_reporters_create(struct bnxt *bp) > { > struct bnxt_fw_health *health = bp->fw_health; > > - if (!bp->dl || !health) > + if (!health) > return; > > if (!(bp->fw_cap & BNXT_FW_CAP_HOT_RESET) || health->fw_reset_reporter) > @@ -188,7 +188,7 @@ void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all) > { > struct bnxt_fw_health *health = bp->fw_health; > > - if (!bp->dl || !health) > + if (!health) > return; > > if ((all || !(bp->fw_cap & BNXT_FW_CAP_HOT_RESET)) && > @@ -781,6 +781,7 @@ int bnxt_dl_register(struct bnxt *bp) > { > const struct devlink_ops *devlink_ops; > struct devlink_port_attrs attrs = {}; > + struct bnxt_dl *bp_dl; > struct devlink *dl; > int rc; > > @@ -795,7 +796,9 @@ int bnxt_dl_register(struct bnxt *bp) > return -ENOMEM; > } > > - bnxt_link_bp_to_dl(bp, dl); > + bp->dl = dl; > + bp_dl = devlink_priv(dl); > + bp_dl->bp = bp; > > /* Add switchdev eswitch mode setting, if SRIOV supported */ > if (pci_find_ext_capability(bp->pdev, PCI_EXT_CAP_ID_SRIOV) && > @@ -826,7 +829,6 @@ int bnxt_dl_register(struct bnxt *bp) > err_dl_port_unreg: > devlink_port_unregister(&bp->dl_port); > err_dl_free: > - bnxt_link_bp_to_dl(bp, NULL); > devlink_free(dl); > return rc; > } > @@ -835,9 +837,6 @@ void bnxt_dl_unregister(struct bnxt *bp) > { > struct devlink *dl = bp->dl; > > - if (!dl) > - return; > - minor nit: There's obviously nothing incorrect about doing this (and adding the additional error label in the cleanup code above), but bnxt has generally adopted a style of having cleanup functions being idempotent. It generally makes error handling simpler and less error prone. > if (BNXT_PF(bp)) { > bnxt_dl_params_unregister(bp); > devlink_port_unregister(&bp->dl_port); > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h > index d889f240da2b..406dc655a5fc 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h > @@ -20,19 +20,6 @@ static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl) > return ((struct bnxt_dl *)devlink_priv(dl))->bp; > } > > -/* To clear devlink pointer from bp, pass NULL dl */ > -static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl) > -{ > - bp->dl = dl; > - > - /* add a back pointer in dl to bp */ > - if (dl) { > - struct bnxt_dl *bp_dl = devlink_priv(dl); > - > - bp_dl->bp = bp; > - } > -} > - > #define NVM_OFF_MSIX_VEC_PER_PF_MAX 108 > #define NVM_OFF_MSIX_VEC_PER_PF_MIN 114 > #define NVM_OFF_IGNORE_ARI 164 > -- > 2.31.1 > Reviewed-by: Edwin Peer <edwin.peer@broadcom.com> Regards, Edwin Peer
WARNING: multiple messages have this Message-ID (diff)
From: Edwin Peer <edwin.peer@broadcom.com> To: intel-wired-lan@osuosl.org Subject: [Intel-wired-lan] [PATCH net-next 1/6] bnxt_en: Check devlink allocation and registration status Date: Thu, 23 Sep 2021 14:11:40 -0700 [thread overview] Message-ID: <CAKOOJTz4A2ER8MQE1dW27Spocds09SYafjeuLcFDJ0nL6mKyOw@mail.gmail.com> (raw) In-Reply-To: <e7708737fadf4fe6f152afc76145c728c201adad.1632420430.git.leonro@nvidia.com> On Thu, Sep 23, 2021 at 11:13 AM Leon Romanovsky <leon@kernel.org> wrote: > > From: Leon Romanovsky <leonro@nvidia.com> > > 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: 4ab0c6a8ffd7 ("bnxt_en: add support to enable VF-representors") > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > --- > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 ++++- > drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 13 ++++++------- > drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 13 ------------- > 3 files changed, 10 insertions(+), 21 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > index 037767b370d5..4c483fd91dbe 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c > @@ -13370,7 +13370,9 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) > } > > bnxt_inv_fw_health_reg(bp); > - bnxt_dl_register(bp); > + rc = bnxt_dl_register(bp); > + if (rc) > + goto init_err_dl; > > rc = register_netdev(dev); > if (rc) > @@ -13390,6 +13392,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) > > init_err_cleanup: > bnxt_dl_unregister(bp); > +init_err_dl: > bnxt_shutdown_tc(bp); > bnxt_clear_int_mode(bp); > > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c > index bf7d3c17049b..dc0851f709f5 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c > @@ -134,7 +134,7 @@ void bnxt_dl_fw_reporters_create(struct bnxt *bp) > { > struct bnxt_fw_health *health = bp->fw_health; > > - if (!bp->dl || !health) > + if (!health) > return; > > if (!(bp->fw_cap & BNXT_FW_CAP_HOT_RESET) || health->fw_reset_reporter) > @@ -188,7 +188,7 @@ void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all) > { > struct bnxt_fw_health *health = bp->fw_health; > > - if (!bp->dl || !health) > + if (!health) > return; > > if ((all || !(bp->fw_cap & BNXT_FW_CAP_HOT_RESET)) && > @@ -781,6 +781,7 @@ int bnxt_dl_register(struct bnxt *bp) > { > const struct devlink_ops *devlink_ops; > struct devlink_port_attrs attrs = {}; > + struct bnxt_dl *bp_dl; > struct devlink *dl; > int rc; > > @@ -795,7 +796,9 @@ int bnxt_dl_register(struct bnxt *bp) > return -ENOMEM; > } > > - bnxt_link_bp_to_dl(bp, dl); > + bp->dl = dl; > + bp_dl = devlink_priv(dl); > + bp_dl->bp = bp; > > /* Add switchdev eswitch mode setting, if SRIOV supported */ > if (pci_find_ext_capability(bp->pdev, PCI_EXT_CAP_ID_SRIOV) && > @@ -826,7 +829,6 @@ int bnxt_dl_register(struct bnxt *bp) > err_dl_port_unreg: > devlink_port_unregister(&bp->dl_port); > err_dl_free: > - bnxt_link_bp_to_dl(bp, NULL); > devlink_free(dl); > return rc; > } > @@ -835,9 +837,6 @@ void bnxt_dl_unregister(struct bnxt *bp) > { > struct devlink *dl = bp->dl; > > - if (!dl) > - return; > - minor nit: There's obviously nothing incorrect about doing this (and adding the additional error label in the cleanup code above), but bnxt has generally adopted a style of having cleanup functions being idempotent. It generally makes error handling simpler and less error prone. > if (BNXT_PF(bp)) { > bnxt_dl_params_unregister(bp); > devlink_port_unregister(&bp->dl_port); > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h > index d889f240da2b..406dc655a5fc 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h > @@ -20,19 +20,6 @@ static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl) > return ((struct bnxt_dl *)devlink_priv(dl))->bp; > } > > -/* To clear devlink pointer from bp, pass NULL dl */ > -static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl) > -{ > - bp->dl = dl; > - > - /* add a back pointer in dl to bp */ > - if (dl) { > - struct bnxt_dl *bp_dl = devlink_priv(dl); > - > - bp_dl->bp = bp; > - } > -} > - > #define NVM_OFF_MSIX_VEC_PER_PF_MAX 108 > #define NVM_OFF_MSIX_VEC_PER_PF_MIN 114 > #define NVM_OFF_IGNORE_ARI 164 > -- > 2.31.1 > Reviewed-by: Edwin Peer <edwin.peer@broadcom.com> Regards, Edwin Peer
next prev parent reply other threads:[~2021-09-23 21:12 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-23 18:12 [PATCH net-next 0/6] Batch of devlink related fixes Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 18:12 ` [PATCH net-next 1/6] bnxt_en: Check devlink allocation and registration status Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 21:11 ` Edwin Peer [this message] 2021-09-23 21:11 ` Edwin Peer 2021-09-23 23:11 ` Leon Romanovsky 2021-09-23 23:11 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-24 1:39 ` Jakub Kicinski 2021-09-24 1:39 ` [Intel-wired-lan] " Jakub Kicinski 2021-09-24 17:20 ` Edwin Peer 2021-09-24 17:20 ` [Intel-wired-lan] " Edwin Peer 2021-09-25 10:01 ` Leon Romanovsky 2021-09-25 10:01 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 18:12 ` [PATCH net-next 2/6] bnxt_en: Properly remove port parameter support Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 21:23 ` Edwin Peer 2021-09-23 21:23 ` [Intel-wired-lan] " Edwin Peer 2021-09-23 18:12 ` [PATCH net-next 3/6] devlink: Delete not used port parameters APIs Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 18:12 ` [PATCH net-next 4/6] devlink: Remove single line function obfuscations Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 18:12 ` [PATCH net-next 5/6] ice: Delete always true check of PF pointer Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 18:12 ` [PATCH net-next 6/6] qed: Don't ignore devlink allocation failures Leon Romanovsky 2021-09-23 18:12 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-23 22:55 ` [PATCH net-next 0/6] Batch of devlink related fixes Jakub Kicinski 2021-09-23 22:55 ` [Intel-wired-lan] " Jakub Kicinski 2021-09-23 23:16 ` Leon Romanovsky 2021-09-23 23:16 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-24 13:14 ` David Miller 2021-09-24 13:14 ` [Intel-wired-lan] " David Miller 2021-09-25 8:56 ` Leon Romanovsky 2021-09-25 8:56 ` [Intel-wired-lan] " Leon Romanovsky 2021-09-24 13:20 ` patchwork-bot+netdevbpf 2021-09-24 13:20 ` [Intel-wired-lan] " patchwork-bot+netdevbpf
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAKOOJTz4A2ER8MQE1dW27Spocds09SYafjeuLcFDJ0nL6mKyOw@mail.gmail.com \ --to=edwin.peer@broadcom.com \ --cc=GR-QLogic-Storage-Upstream@marvell.com \ --cc=GR-everest-linux-l2@marvell.com \ --cc=aelior@marvell.com \ --cc=alobakin@pm.me \ --cc=anirudh.venkataramanan@intel.com \ --cc=anthony.l.nguyen@intel.com \ --cc=davem@davemloft.net \ --cc=intel-wired-lan@lists.osuosl.org \ --cc=irusskikh@marvell.com \ --cc=jeffrey.t.kirsher@intel.com \ --cc=jejb@linux.ibm.com \ --cc=jesse.brandeburg@intel.com \ --cc=jhasan@marvell.com \ --cc=jiri@nvidia.com \ --cc=kuba@kernel.org \ --cc=leon@kernel.org \ --cc=leonro@nvidia.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-scsi@vger.kernel.org \ --cc=martin.petersen@oracle.com \ --cc=michael.chan@broadcom.com \ --cc=michal.kalderon@marvell.com \ --cc=netdev@vger.kernel.org \ --cc=sathya.perla@broadcom.com \ --cc=skashyap@marvell.com \ --cc=vasundhara-v.volam@broadcom.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.