]> git.baikalelectronics.ru Git - kernel.git/commitdiff
bpf: Make bpf_link API available indepently of CONFIG_BPF_SYSCALL
authorAndrii Nakryiko <andriin@fb.com>
Wed, 22 Jul 2020 06:45:54 +0000 (23:45 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 26 Jul 2020 03:37:01 +0000 (20:37 -0700)
Similarly to bpf_prog, make bpf_link and related generic API available
unconditionally to make it easier to have bpf_link support in various parts of
the kernel. Stub out init/prime/settle/cleanup and inc/put APIs.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200722064603.3350758-2-andriin@fb.com
include/linux/bpf.h

index 8357be3491333c78ff3007db6c4182fab258b351..40c5e206ecf2111c60b38f98624229c3ab723459 100644 (file)
@@ -781,6 +781,32 @@ struct bpf_array_aux {
        struct work_struct work;
 };
 
+struct bpf_link {
+       atomic64_t refcnt;
+       u32 id;
+       enum bpf_link_type type;
+       const struct bpf_link_ops *ops;
+       struct bpf_prog *prog;
+       struct work_struct work;
+};
+
+struct bpf_link_ops {
+       void (*release)(struct bpf_link *link);
+       void (*dealloc)(struct bpf_link *link);
+       int (*update_prog)(struct bpf_link *link, struct bpf_prog *new_prog,
+                          struct bpf_prog *old_prog);
+       void (*show_fdinfo)(const struct bpf_link *link, struct seq_file *seq);
+       int (*fill_link_info)(const struct bpf_link *link,
+                             struct bpf_link_info *info);
+};
+
+struct bpf_link_primer {
+       struct bpf_link *link;
+       struct file *file;
+       int fd;
+       u32 id;
+};
+
 struct bpf_struct_ops_value;
 struct btf_type;
 struct btf_member;
@@ -1164,32 +1190,6 @@ static inline bool bpf_bypass_spec_v4(void)
 int bpf_map_new_fd(struct bpf_map *map, int flags);
 int bpf_prog_new_fd(struct bpf_prog *prog);
 
-struct bpf_link {
-       atomic64_t refcnt;
-       u32 id;
-       enum bpf_link_type type;
-       const struct bpf_link_ops *ops;
-       struct bpf_prog *prog;
-       struct work_struct work;
-};
-
-struct bpf_link_primer {
-       struct bpf_link *link;
-       struct file *file;
-       int fd;
-       u32 id;
-};
-
-struct bpf_link_ops {
-       void (*release)(struct bpf_link *link);
-       void (*dealloc)(struct bpf_link *link);
-       int (*update_prog)(struct bpf_link *link, struct bpf_prog *new_prog,
-                          struct bpf_prog *old_prog);
-       void (*show_fdinfo)(const struct bpf_link *link, struct seq_file *seq);
-       int (*fill_link_info)(const struct bpf_link *link,
-                             struct bpf_link_info *info);
-};
-
 void bpf_link_init(struct bpf_link *link, enum bpf_link_type type,
                   const struct bpf_link_ops *ops, struct bpf_prog *prog);
 int bpf_link_prime(struct bpf_link *link, struct bpf_link_primer *primer);
@@ -1401,6 +1401,35 @@ static inline void __bpf_prog_uncharge(struct user_struct *user, u32 pages)
 {
 }
 
+static inline void bpf_link_init(struct bpf_link *link, enum bpf_link_type type,
+                                const struct bpf_link_ops *ops,
+                                struct bpf_prog *prog)
+{
+}
+
+static inline int bpf_link_prime(struct bpf_link *link,
+                                struct bpf_link_primer *primer)
+{
+       return -EOPNOTSUPP;
+}
+
+static inline int bpf_link_settle(struct bpf_link_primer *primer)
+{
+       return -EOPNOTSUPP;
+}
+
+static inline void bpf_link_cleanup(struct bpf_link_primer *primer)
+{
+}
+
+static inline void bpf_link_inc(struct bpf_link *link)
+{
+}
+
+static inline void bpf_link_put(struct bpf_link *link)
+{
+}
+
 static inline int bpf_obj_get_user(const char __user *pathname, int flags)
 {
        return -EOPNOTSUPP;