summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/netronome/nfp/flower/main.c
diff options
context:
space:
mode:
authorJakub Kicinski2017-06-27 09:50:19 +0200
committerDavid S. Miller2017-06-27 21:48:47 +0200
commit9ce6bbbb0503e58e8629ae0185e916b271237bc3 (patch)
treec0401e79f9b4f45c5f020b72e449210fe6a0d711 /drivers/net/ethernet/netronome/nfp/flower/main.c
parentnfp: remove unused nfp_cpp_area_check_range() (diff)
downloadkernel-qcow2-linux-9ce6bbbb0503e58e8629ae0185e916b271237bc3.tar.gz
kernel-qcow2-linux-9ce6bbbb0503e58e8629ae0185e916b271237bc3.tar.xz
kernel-qcow2-linux-9ce6bbbb0503e58e8629ae0185e916b271237bc3.zip
nfp: add nfp_app cleanup callback and make flower use it
Add a cleanup callback for undoing what app init callback did. Make flower allocate its private structure on init and free it from the new callback. While at it remember to set the app pointer to NULL on the error path to avoid any races while probe path unwinds. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp/flower/main.c')
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/main.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.c b/drivers/net/ethernet/netronome/nfp/flower/main.c
index 8e5ca6b4bb33..54d42a7f0d75 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/main.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/main.c
@@ -296,26 +296,16 @@ static int nfp_flower_start(struct nfp_app *app)
NFP_REPR_TYPE_PF, 1);
}
-static void nfp_flower_vnic_clean(struct nfp_app *app, struct nfp_net *nn)
-{
- kfree(app->priv);
- app->priv = NULL;
-}
-
static int nfp_flower_vnic_init(struct nfp_app *app, struct nfp_net *nn,
unsigned int id)
{
- struct nfp_flower_priv *priv;
+ struct nfp_flower_priv *priv = app->priv;
if (id > 0) {
nfp_warn(app->cpp, "FlowerNIC doesn't support more than one data vNIC\n");
goto err_invalid_port;
}
- priv = kzalloc(sizeof(*priv), GFP_KERNEL);
- if (!priv)
- return -ENOMEM;
- app->priv = priv;
priv->nn = nn;
eth_hw_addr_random(nn->dp.netdev);
@@ -347,9 +337,19 @@ static int nfp_flower_init(struct nfp_app *app)
return -EINVAL;
}
+ app->priv = kzalloc(sizeof(struct nfp_flower_priv), GFP_KERNEL);
+ if (!app->priv)
+ return -ENOMEM;
+
return 0;
}
+static void nfp_flower_clean(struct nfp_app *app)
+{
+ kfree(app->priv);
+ app->priv = NULL;
+}
+
const struct nfp_app_type app_flower = {
.id = NFP_APP_FLOWER_NIC,
.name = "flower",
@@ -358,9 +358,9 @@ const struct nfp_app_type app_flower = {
.extra_cap = nfp_flower_extra_cap,
.init = nfp_flower_init,
+ .clean = nfp_flower_clean,
.vnic_init = nfp_flower_vnic_init,
- .vnic_clean = nfp_flower_vnic_clean,
.start = nfp_flower_start,
.stop = nfp_flower_stop,