app->ctrl_mtu = nfp_bpf_ctrl_cmsg_mtu(bpf);
        }
 
-       bpf->bpf_dev = bpf_offload_dev_create(&nfp_bpf_dev_ops);
+       bpf->bpf_dev = bpf_offload_dev_create(&nfp_bpf_dev_ops, bpf);
        err = PTR_ERR_OR_ZERO(bpf->bpf_dev);
        if (err)
                goto err_free_neutral_maps;
 
 
 static int nfp_bpf_verifier_prep(struct bpf_prog *prog)
 {
-       struct nfp_net *nn = netdev_priv(prog->aux->offload->netdev);
-       struct nfp_app *app = nn->app;
        struct nfp_prog *nfp_prog;
        int ret;
 
 
        INIT_LIST_HEAD(&nfp_prog->insns);
        nfp_prog->type = prog->type;
-       nfp_prog->bpf = app->priv;
+       nfp_prog->bpf = bpf_offload_dev_priv(prog->aux->offload->offdev);
 
        ret = nfp_prog_prepare(nfp_prog, prog->insnsi, prog->len);
        if (ret)
 
 
 static int nsim_bpf_verifier_prep(struct bpf_prog *prog)
 {
-       struct netdevsim *ns = netdev_priv(prog->aux->offload->netdev);
+       struct netdevsim *ns = bpf_offload_dev_priv(prog->aux->offload->offdev);
 
        if (!ns->bpf_bind_accept)
                return -EOPNOTSUPP;
                if (IS_ERR_OR_NULL(ns->sdev->ddir_bpf_bound_progs))
                        return -ENOMEM;
 
-               ns->sdev->bpf_dev = bpf_offload_dev_create(&nsim_bpf_dev_ops);
+               ns->sdev->bpf_dev = bpf_offload_dev_create(&nsim_bpf_dev_ops,
+                                                          ns);
                err = PTR_ERR_OR_ZERO(ns->sdev->bpf_dev);
                if (err)
                        return err;
 
 bool bpf_offload_prog_map_match(struct bpf_prog *prog, struct bpf_map *map);
 
 struct bpf_offload_dev *
-bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops);
+bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops, void *priv);
 void bpf_offload_dev_destroy(struct bpf_offload_dev *offdev);
+void *bpf_offload_dev_priv(struct bpf_offload_dev *offdev);
 int bpf_offload_dev_netdev_register(struct bpf_offload_dev *offdev,
                                    struct net_device *netdev);
 void bpf_offload_dev_netdev_unregister(struct bpf_offload_dev *offdev,
 
 struct bpf_offload_dev {
        const struct bpf_prog_offload_ops *ops;
        struct list_head netdevs;
+       void *priv;
 };
 
 struct bpf_offload_netdev {
 EXPORT_SYMBOL_GPL(bpf_offload_dev_netdev_unregister);
 
 struct bpf_offload_dev *
-bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops)
+bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops, void *priv)
 {
        struct bpf_offload_dev *offdev;
        int err;
                return ERR_PTR(-ENOMEM);
 
        offdev->ops = ops;
+       offdev->priv = priv;
        INIT_LIST_HEAD(&offdev->netdevs);
 
        return offdev;
        kfree(offdev);
 }
 EXPORT_SYMBOL_GPL(bpf_offload_dev_destroy);
+
+void *bpf_offload_dev_priv(struct bpf_offload_dev *offdev)
+{
+       return offdev->priv;
+}
+EXPORT_SYMBOL_GPL(bpf_offload_dev_priv);