Commit 16a8cb5c authored by Quentin Monnet's avatar Quentin Monnet Committed by Alexei Starovoitov

bpf: do not pass netdev to translate() and prepare() offload callbacks

The kernel functions to prepare verifier and translate for offloaded
program retrieve "offload" from "prog", and "netdev" from "offload".
Then both "prog" and "netdev" are passed to the callbacks.

Simplify this by letting the drivers retrieve the net device themselves
from the offload object attached to prog - if they need it at all. There
is currently no need to pass the netdev as an argument to those
functions.
Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent a40a2632
...@@ -182,10 +182,9 @@ static void nfp_prog_free(struct nfp_prog *nfp_prog) ...@@ -182,10 +182,9 @@ static void nfp_prog_free(struct nfp_prog *nfp_prog)
kfree(nfp_prog); kfree(nfp_prog);
} }
static int static int nfp_bpf_verifier_prep(struct bpf_prog *prog)
nfp_bpf_verifier_prep(struct net_device *netdev, struct bpf_prog *prog)
{ {
struct nfp_net *nn = netdev_priv(netdev); struct nfp_net *nn = netdev_priv(prog->aux->offload->netdev);
struct nfp_app *app = nn->app; struct nfp_app *app = nn->app;
struct nfp_prog *nfp_prog; struct nfp_prog *nfp_prog;
int ret; int ret;
...@@ -213,10 +212,10 @@ nfp_bpf_verifier_prep(struct net_device *netdev, struct bpf_prog *prog) ...@@ -213,10 +212,10 @@ nfp_bpf_verifier_prep(struct net_device *netdev, struct bpf_prog *prog)
return ret; return ret;
} }
static int nfp_bpf_translate(struct net_device *netdev, struct bpf_prog *prog) static int nfp_bpf_translate(struct bpf_prog *prog)
{ {
struct nfp_net *nn = netdev_priv(prog->aux->offload->netdev);
struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv;
struct nfp_net *nn = netdev_priv(netdev);
unsigned int max_instr; unsigned int max_instr;
int err; int err;
......
...@@ -258,10 +258,9 @@ static int nsim_bpf_create_prog(struct netdevsim *ns, struct bpf_prog *prog) ...@@ -258,10 +258,9 @@ static int nsim_bpf_create_prog(struct netdevsim *ns, struct bpf_prog *prog)
return 0; return 0;
} }
static int static int nsim_bpf_verifier_prep(struct bpf_prog *prog)
nsim_bpf_verifier_prep(struct net_device *dev, struct bpf_prog *prog)
{ {
struct netdevsim *ns = netdev_priv(dev); struct netdevsim *ns = netdev_priv(prog->aux->offload->netdev);
if (!ns->bpf_bind_accept) if (!ns->bpf_bind_accept)
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -269,7 +268,7 @@ nsim_bpf_verifier_prep(struct net_device *dev, struct bpf_prog *prog) ...@@ -269,7 +268,7 @@ nsim_bpf_verifier_prep(struct net_device *dev, struct bpf_prog *prog)
return nsim_bpf_create_prog(ns, prog); return nsim_bpf_create_prog(ns, prog);
} }
static int nsim_bpf_translate(struct net_device *dev, struct bpf_prog *prog) static int nsim_bpf_translate(struct bpf_prog *prog)
{ {
struct nsim_bpf_bound_prog *state = prog->aux->offload->dev_priv; struct nsim_bpf_bound_prog *state = prog->aux->offload->dev_priv;
......
...@@ -268,8 +268,8 @@ struct bpf_prog_offload_ops { ...@@ -268,8 +268,8 @@ struct bpf_prog_offload_ops {
int (*insn_hook)(struct bpf_verifier_env *env, int (*insn_hook)(struct bpf_verifier_env *env,
int insn_idx, int prev_insn_idx); int insn_idx, int prev_insn_idx);
int (*finalize)(struct bpf_verifier_env *env); int (*finalize)(struct bpf_verifier_env *env);
int (*prepare)(struct net_device *netdev, struct bpf_prog *prog); int (*prepare)(struct bpf_prog *prog);
int (*translate)(struct net_device *netdev, struct bpf_prog *prog); int (*translate)(struct bpf_prog *prog);
void (*destroy)(struct bpf_prog *prog); void (*destroy)(struct bpf_prog *prog);
}; };
......
...@@ -131,7 +131,7 @@ int bpf_prog_offload_verifier_prep(struct bpf_prog *prog) ...@@ -131,7 +131,7 @@ int bpf_prog_offload_verifier_prep(struct bpf_prog *prog)
down_read(&bpf_devs_lock); down_read(&bpf_devs_lock);
offload = prog->aux->offload; offload = prog->aux->offload;
if (offload) if (offload)
ret = offload->offdev->ops->prepare(offload->netdev, prog); ret = offload->offdev->ops->prepare(prog);
offload->dev_state = !ret; offload->dev_state = !ret;
up_read(&bpf_devs_lock); up_read(&bpf_devs_lock);
...@@ -203,7 +203,7 @@ static int bpf_prog_offload_translate(struct bpf_prog *prog) ...@@ -203,7 +203,7 @@ static int bpf_prog_offload_translate(struct bpf_prog *prog)
down_read(&bpf_devs_lock); down_read(&bpf_devs_lock);
offload = prog->aux->offload; offload = prog->aux->offload;
if (offload) if (offload)
ret = offload->offdev->ops->translate(offload->netdev, prog); ret = offload->offdev->ops->translate(prog);
up_read(&bpf_devs_lock); up_read(&bpf_devs_lock);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment