aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Monnet <quentin.monnet@netronome.com>2018-01-19 20:44:49 -0500
committerDavid S. Miller <davem@davemloft.net>2018-01-22 16:28:32 -0500
commitacc2abbbb1b9fb8a018706055794feb4bb9bcdbc (patch)
treed66b2463bb822b8d54f9d1992c3ac8f01ed8e6bf
parentf9eda14f039294298643d034bc5c06340fe16cc0 (diff)
nfp: bpf: plumb extack into functions related to XDP offload
Pass a pointer to an extack object to nfp_app_xdp_offload() in order to prepare for extack usage in the nfp driver. Next step will be to forward this extack pointer to nfp_net_bpf_offload(), once this function is able to use it for printing error messages. Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/netronome/nfp/bpf/main.c4
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_app.h9
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_common.c2
3 files changed, 9 insertions, 6 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c
index 4ee11bf2aed7..b755c9164ab9 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/main.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c
@@ -54,7 +54,7 @@ static bool nfp_net_ebpf_capable(struct nfp_net *nn)
54 54
55static int 55static int
56nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn, 56nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn,
57 struct bpf_prog *prog) 57 struct bpf_prog *prog, struct netlink_ext_ack *extack)
58{ 58{
59 bool running, xdp_running; 59 bool running, xdp_running;
60 int ret; 60 int ret;
@@ -73,7 +73,7 @@ nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn,
73 ret = nfp_net_bpf_offload(nn, prog, running); 73 ret = nfp_net_bpf_offload(nn, prog, running);
74 /* Stop offload if replace not possible */ 74 /* Stop offload if replace not possible */
75 if (ret && prog) 75 if (ret && prog)
76 nfp_bpf_xdp_offload(app, nn, NULL); 76 nfp_bpf_xdp_offload(app, nn, NULL, extack);
77 77
78 nn->dp.bpf_offload_xdp = prog && !ret; 78 nn->dp.bpf_offload_xdp = prog && !ret;
79 return ret; 79 return ret;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.h b/drivers/net/ethernet/netronome/nfp/nfp_app.h
index 7e474df90598..437964afa8ee 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_app.h
+++ b/drivers/net/ethernet/netronome/nfp/nfp_app.h
@@ -43,6 +43,7 @@
43struct bpf_prog; 43struct bpf_prog;
44struct net_device; 44struct net_device;
45struct netdev_bpf; 45struct netdev_bpf;
46struct netlink_ext_ack;
46struct pci_dev; 47struct pci_dev;
47struct sk_buff; 48struct sk_buff;
48struct sk_buff; 49struct sk_buff;
@@ -138,7 +139,8 @@ struct nfp_app_type {
138 int (*bpf)(struct nfp_app *app, struct nfp_net *nn, 139 int (*bpf)(struct nfp_app *app, struct nfp_net *nn,
139 struct netdev_bpf *xdp); 140 struct netdev_bpf *xdp);
140 int (*xdp_offload)(struct nfp_app *app, struct nfp_net *nn, 141 int (*xdp_offload)(struct nfp_app *app, struct nfp_net *nn,
141 struct bpf_prog *prog); 142 struct bpf_prog *prog,
143 struct netlink_ext_ack *extack);
142 144
143 int (*sriov_enable)(struct nfp_app *app, int num_vfs); 145 int (*sriov_enable)(struct nfp_app *app, int num_vfs);
144 void (*sriov_disable)(struct nfp_app *app); 146 void (*sriov_disable)(struct nfp_app *app);
@@ -324,11 +326,12 @@ static inline int nfp_app_bpf(struct nfp_app *app, struct nfp_net *nn,
324} 326}
325 327
326static inline int nfp_app_xdp_offload(struct nfp_app *app, struct nfp_net *nn, 328static inline int nfp_app_xdp_offload(struct nfp_app *app, struct nfp_net *nn,
327 struct bpf_prog *prog) 329 struct bpf_prog *prog,
330 struct netlink_ext_ack *extack)
328{ 331{
329 if (!app || !app->type->xdp_offload) 332 if (!app || !app->type->xdp_offload)
330 return -EOPNOTSUPP; 333 return -EOPNOTSUPP;
331 return app->type->xdp_offload(app, nn, prog); 334 return app->type->xdp_offload(app, nn, prog, extack);
332} 335}
333 336
334static inline bool __nfp_app_ctrl_tx(struct nfp_app *app, struct sk_buff *skb) 337static inline bool __nfp_app_ctrl_tx(struct nfp_app *app, struct sk_buff *skb)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index cdf52421eaca..c0fd351c86b1 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -3403,7 +3403,7 @@ nfp_net_xdp_setup(struct nfp_net *nn, struct bpf_prog *prog, u32 flags,
3403 if (err) 3403 if (err)
3404 return err; 3404 return err;
3405 3405
3406 err = nfp_app_xdp_offload(nn->app, nn, offload_prog); 3406 err = nfp_app_xdp_offload(nn->app, nn, offload_prog, extack);
3407 if (err && flags & XDP_FLAGS_HW_MODE) 3407 if (err && flags & XDP_FLAGS_HW_MODE)
3408 return err; 3408 return err;
3409 3409