Skip to content

Commit

Permalink
nfp: bpf: allocate vNIC priv for keeping track of the offloaded program
Browse files Browse the repository at this point in the history
After TC offloads were converted to callbacks we have no choice
but keep track of the offloaded filter in the driver.

Since this change came a little late in the release cycle
there were a number of conflicts and allocation of vNIC priv
structure seems to have slipped away in linux-next.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jakub Kicinski authored and David S. Miller committed Dec 28, 2017
1 parent 4f36b93 commit 4f83435
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion drivers/net/ethernet/netronome/nfp/bpf/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,33 @@ static const char *nfp_bpf_extra_cap(struct nfp_app *app, struct nfp_net *nn)
return nfp_net_ebpf_capable(nn) ? "BPF" : "";
}

static int
nfp_bpf_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, unsigned int id)
{
int err;

nn->app_priv = kzalloc(sizeof(struct nfp_bpf_vnic), GFP_KERNEL);
if (!nn->app_priv)
return -ENOMEM;

err = nfp_app_nic_vnic_alloc(app, nn, id);
if (err)
goto err_free_priv;

return 0;
err_free_priv:
kfree(nn->app_priv);
return err;
}

static void nfp_bpf_vnic_free(struct nfp_app *app, struct nfp_net *nn)
{
struct nfp_bpf_vnic *bv = nn->app_priv;

WARN_ON(bv->tc_prog);
kfree(bv);
}

static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type,
void *type_data, void *cb_priv)
{
Expand Down Expand Up @@ -286,7 +313,8 @@ const struct nfp_app_type app_bpf = {

.extra_cap = nfp_bpf_extra_cap,

.vnic_alloc = nfp_app_nic_vnic_alloc,
.vnic_alloc = nfp_bpf_vnic_alloc,
.vnic_free = nfp_bpf_vnic_free,

.setup_tc = nfp_bpf_setup_tc,
.tc_busy = nfp_bpf_tc_busy,
Expand Down

0 comments on commit 4f83435

Please sign in to comment.