aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/netronome/nfp/bpf/main.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/main.c b/drivers/net/ethernet/netronome/nfp/bpf/main.c
index 214b02a3acdd..4b63167906ca 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/main.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/main.c
@@ -84,6 +84,33 @@ static const char *nfp_bpf_extra_cap(struct nfp_app *app, struct nfp_net *nn)
84 return nfp_net_ebpf_capable(nn) ? "BPF" : ""; 84 return nfp_net_ebpf_capable(nn) ? "BPF" : "";
85} 85}
86 86
87static int
88nfp_bpf_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id)
89{
90 int err;
91
92 nn->app_priv = kzalloc(sizeof(struct nfp_bpf_vnic), GFP_KERNEL);
93 if (!nn->app_priv)
94 return -ENOMEM;
95
96 err = nfp_app_nic_vnic_alloc(app, nn, id);
97 if (err)
98 goto err_free_priv;
99
100 return 0;
101err_free_priv:
102 kfree(nn->app_priv);
103 return err;
104}
105
106static void nfp_bpf_vnic_free(struct nfp_app *app, struct nfp_net *nn)
107{
108 struct nfp_bpf_vnic *bv = nn->app_priv;
109
110 WARN_ON(bv->tc_prog);
111 kfree(bv);
112}
113
87static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type, 114static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type,
88 void *type_data, void *cb_priv) 115 void *type_data, void *cb_priv)
89{ 116{
@@ -286,7 +313,8 @@ const struct nfp_app_type app_bpf = {
286 313
287 .extra_cap = nfp_bpf_extra_cap, 314 .extra_cap = nfp_bpf_extra_cap,
288 315
289 .vnic_alloc = nfp_app_nic_vnic_alloc, 316 .vnic_alloc = nfp_bpf_vnic_alloc,
317 .vnic_free = nfp_bpf_vnic_free,
290 318
291 .setup_tc = nfp_bpf_setup_tc, 319 .setup_tc = nfp_bpf_setup_tc,
292 .tc_busy = nfp_bpf_tc_busy, 320 .tc_busy = nfp_bpf_tc_busy,