selftests/bpf: Add bpf_percpu_obj_{new,drop}() macro in bpf_experimental.h
authorYonghong Song <yonghong.song@linux.dev>
Sun, 27 Aug 2023 15:28:05 +0000 (08:28 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 8 Sep 2023 15:42:18 +0000 (08:42 -0700)
The new macro bpf_percpu_obj_{new/drop}() is very similar to bpf_obj_{new,drop}()
as they both take a type as the argument.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20230827152805.1999417-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/bpf_experimental.h

index 209811b1993aff3a30177dea29e6fb9e5f3055e4..4494eaa9937e5771751e1b238ed0570c3c3a728a 100644 (file)
@@ -131,4 +131,35 @@ extern int bpf_rbtree_add_impl(struct bpf_rb_root *root, struct bpf_rb_node *nod
  */
 extern struct bpf_rb_node *bpf_rbtree_first(struct bpf_rb_root *root) __ksym;
 
+/* Description
+ *     Allocates a percpu object of the type represented by 'local_type_id' in
+ *     program BTF. User may use the bpf_core_type_id_local macro to pass the
+ *     type ID of a struct in program BTF.
+ *
+ *     The 'local_type_id' parameter must be a known constant.
+ *     The 'meta' parameter is rewritten by the verifier, no need for BPF
+ *     program to set it.
+ * Returns
+ *     A pointer to a percpu object of the type corresponding to the passed in
+ *     'local_type_id', or NULL on failure.
+ */
+extern void *bpf_percpu_obj_new_impl(__u64 local_type_id, void *meta) __ksym;
+
+/* Convenience macro to wrap over bpf_percpu_obj_new_impl */
+#define bpf_percpu_obj_new(type) ((type __percpu_kptr *)bpf_percpu_obj_new_impl(bpf_core_type_id_local(type), NULL))
+
+/* Description
+ *     Free an allocated percpu object. All fields of the object that require
+ *     destruction will be destructed before the storage is freed.
+ *
+ *     The 'meta' parameter is rewritten by the verifier, no need for BPF
+ *     program to set it.
+ * Returns
+ *     Void.
+ */
+extern void bpf_percpu_obj_drop_impl(void *kptr, void *meta) __ksym;
+
+/* Convenience macro to wrap over bpf_obj_drop_impl */
+#define bpf_percpu_obj_drop(kptr) bpf_percpu_obj_drop_impl(kptr, NULL)
+
 #endif