diff options
author | Quentin Monnet <quentin.monnet@netronome.com> | 2018-01-19 20:44:49 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-22 16:28:32 -0500 |
commit | acc2abbbb1b9fb8a018706055794feb4bb9bcdbc (patch) | |
tree | d66b2463bb822b8d54f9d1992c3ac8f01ed8e6bf | |
parent | f9eda14f039294298643d034bc5c06340fe16cc0 (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.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_app.h | 9 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 2 |
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 | ||
55 | static int | 55 | static int |
56 | nfp_bpf_xdp_offload(struct nfp_app *app, struct nfp_net *nn, | 56 | nfp_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 @@ | |||
43 | struct bpf_prog; | 43 | struct bpf_prog; |
44 | struct net_device; | 44 | struct net_device; |
45 | struct netdev_bpf; | 45 | struct netdev_bpf; |
46 | struct netlink_ext_ack; | ||
46 | struct pci_dev; | 47 | struct pci_dev; |
47 | struct sk_buff; | 48 | struct sk_buff; |
48 | struct sk_buff; | 49 | struct 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 | ||
326 | static inline int nfp_app_xdp_offload(struct nfp_app *app, struct nfp_net *nn, | 328 | static 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 | ||
334 | static inline bool __nfp_app_ctrl_tx(struct nfp_app *app, struct sk_buff *skb) | 337 | static 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 | ||