]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
nfp: correct cleanup related to DCB resources
authorHuayu Chen <huayu.chen@corigine.com>
Tue, 31 Jan 2023 16:30:33 +0000 (17:30 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 2 Feb 2023 03:57:30 +0000 (19:57 -0800)
This patch corrects two oversights relating to releasing resources
and DCB initialisation.

1. If mapping of the dcbcfg_tbl area fails: an error should be
   propagated, allowing partial initialisation (probe) to be unwound.

2. Conversely, if where dcbcfg_tbl is successfully mapped: it should
   be unmapped in nfp_nic_dcb_clean() which is called via various error
   cleanup paths, and shutdown or removal of the PCIE device.

Fixes: 9b7fe8046d74 ("nfp: add DCB IEEE support")
Signed-off-by: Huayu Chen <huayu.chen@corigine.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230131163033.981937-1-simon.horman@corigine.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/netronome/nfp/nic/main.c
drivers/net/ethernet/netronome/nfp/nic/main.h

index f78c2447d45b41e897760ccacecfa6479c0bd4fe..9dd5afe37f6e44ca0c4043db58514a0964246e89 100644 (file)
@@ -32,9 +32,12 @@ static void nfp_nic_sriov_disable(struct nfp_app *app)
 
 static int nfp_nic_vnic_init(struct nfp_app *app, struct nfp_net *nn)
 {
-       nfp_nic_dcb_init(nn);
+       return nfp_nic_dcb_init(nn);
+}
 
-       return 0;
+static void nfp_nic_vnic_clean(struct nfp_app *app, struct nfp_net *nn)
+{
+       nfp_nic_dcb_clean(nn);
 }
 
 static int nfp_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn,
@@ -72,4 +75,5 @@ const struct nfp_app_type app_nic = {
        .sriov_disable  = nfp_nic_sriov_disable,
 
        .vnic_init      = nfp_nic_vnic_init,
+       .vnic_clean     = nfp_nic_vnic_clean,
 };
index 7ba04451b8bae78646a71759d1a9276d49eb8e0c..094374df42b8c41513f968e44455f3e286fdcd84 100644 (file)
@@ -33,7 +33,7 @@ struct nfp_dcb {
 int nfp_nic_dcb_init(struct nfp_net *nn);
 void nfp_nic_dcb_clean(struct nfp_net *nn);
 #else
-static inline int nfp_nic_dcb_init(struct nfp_net *nn) {return 0; }
+static inline int nfp_nic_dcb_init(struct nfp_net *nn) { return 0; }
 static inline void nfp_nic_dcb_clean(struct nfp_net *nn) {}
 #endif