aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf/offload.c
diff options
context:
space:
mode:
authorJakub Kicinski <jakub.kicinski@netronome.com>2019-02-12 03:20:39 -0500
committerDaniel Borkmann <daniel@iogearbox.net>2019-02-12 11:07:09 -0500
commitdd27c2e3d0a05c01ff14bb672d1a3f0fdd8f98fc (patch)
tree42041b30b1d27545ac6fde1849cf0044194f1e2a /kernel/bpf/offload.c
parentebbed0f46ed9d3ae23291d67cd52d18abb8501bc (diff)
bpf: offload: add priv field for drivers
Currently bpf_offload_dev does not have any priv pointer, forcing the drivers to work backwards from the netdev in program metadata. This is not great given programs are conceptually associated with the offload device, and it means one or two unnecessary deferences. Add a priv pointer to bpf_offload_dev. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'kernel/bpf/offload.c')
-rw-r--r--kernel/bpf/offload.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c
index 39dba8c90331..ba635209ae9a 100644
--- a/kernel/bpf/offload.c
+++ b/kernel/bpf/offload.c
@@ -35,6 +35,7 @@ static DECLARE_RWSEM(bpf_devs_lock);
35struct bpf_offload_dev { 35struct bpf_offload_dev {
36 const struct bpf_prog_offload_ops *ops; 36 const struct bpf_prog_offload_ops *ops;
37 struct list_head netdevs; 37 struct list_head netdevs;
38 void *priv;
38}; 39};
39 40
40struct bpf_offload_netdev { 41struct bpf_offload_netdev {
@@ -669,7 +670,7 @@ unlock:
669EXPORT_SYMBOL_GPL(bpf_offload_dev_netdev_unregister); 670EXPORT_SYMBOL_GPL(bpf_offload_dev_netdev_unregister);
670 671
671struct bpf_offload_dev * 672struct bpf_offload_dev *
672bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops) 673bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops, void *priv)
673{ 674{
674 struct bpf_offload_dev *offdev; 675 struct bpf_offload_dev *offdev;
675 int err; 676 int err;
@@ -688,6 +689,7 @@ bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops)
688 return ERR_PTR(-ENOMEM); 689 return ERR_PTR(-ENOMEM);
689 690
690 offdev->ops = ops; 691 offdev->ops = ops;
692 offdev->priv = priv;
691 INIT_LIST_HEAD(&offdev->netdevs); 693 INIT_LIST_HEAD(&offdev->netdevs);
692 694
693 return offdev; 695 return offdev;
@@ -700,3 +702,9 @@ void bpf_offload_dev_destroy(struct bpf_offload_dev *offdev)
700 kfree(offdev); 702 kfree(offdev);
701} 703}
702EXPORT_SYMBOL_GPL(bpf_offload_dev_destroy); 704EXPORT_SYMBOL_GPL(bpf_offload_dev_destroy);
705
706void *bpf_offload_dev_priv(struct bpf_offload_dev *offdev)
707{
708 return offdev->priv;
709}
710EXPORT_SYMBOL_GPL(bpf_offload_dev_priv);