mirror of https://gitee.com/openkylin/linux.git
nfp: bpf: allocate vNIC priv for keeping track of the offloaded program
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>
This commit is contained in:
parent
4f36b935ec
commit
4f83435ad7
|
@ -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)
|
||||
{
|
||||
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue