]> www.infradead.org Git - users/hch/configfs.git/commitdiff
selftests/bpf: amend for wrong bpf_wq_set_callback_impl signature
authorBenjamin Tissoires <bentiss@kernel.org>
Mon, 8 Jul 2024 09:52:58 +0000 (11:52 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Mon, 8 Jul 2024 17:01:48 +0000 (10:01 -0700)
See the previous patch: the API was wrong, we were provided the pointer
to the value, not the actual struct bpf_wq *.

Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
Link: https://lore.kernel.org/r/20240708-fix-wq-v2-2-667e5c9fbd99@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/bpf_experimental.h
tools/testing/selftests/bpf/progs/wq.c
tools/testing/selftests/bpf/progs/wq_failures.c

index eede6fc2ccb4043d78591046a0e2bc7c09c014d5..828556cdc2f0d461c994821655b31f817a114553 100644 (file)
@@ -552,7 +552,7 @@ extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym;
 extern int bpf_wq_init(struct bpf_wq *wq, void *p__map, unsigned int flags) __weak __ksym;
 extern int bpf_wq_start(struct bpf_wq *wq, unsigned int flags) __weak __ksym;
 extern int bpf_wq_set_callback_impl(struct bpf_wq *wq,
-               int (callback_fn)(void *map, int *key, struct bpf_wq *wq),
+               int (callback_fn)(void *map, int *key, void *value),
                unsigned int flags__k, void *aux__ign) __ksym;
 #define bpf_wq_set_callback(timer, cb, flags) \
        bpf_wq_set_callback_impl(timer, cb, flags, NULL)
index 49e712acbf60042f91e2ff4f49cd7920d358426f..f8d3ae0c29aeb3da58c604f6a2eb6aeb3c90e365 100644 (file)
@@ -32,6 +32,7 @@ struct {
 } hmap_malloc SEC(".maps");
 
 struct elem {
+       int ok_offset;
        struct bpf_wq w;
 };
 
@@ -53,7 +54,7 @@ __u32 ok;
 __u32 ok_sleepable;
 
 static int test_elem_callback(void *map, int *key,
-               int (callback_fn)(void *map, int *key, struct bpf_wq *wq))
+               int (callback_fn)(void *map, int *key, void *value))
 {
        struct elem init = {}, *val;
        struct bpf_wq *wq;
@@ -70,6 +71,8 @@ static int test_elem_callback(void *map, int *key,
        if (!val)
                return -2;
 
+       val->ok_offset = *key;
+
        wq = &val->w;
        if (bpf_wq_init(wq, map, 0) != 0)
                return -3;
@@ -84,7 +87,7 @@ static int test_elem_callback(void *map, int *key,
 }
 
 static int test_hmap_elem_callback(void *map, int *key,
-               int (callback_fn)(void *map, int *key, struct bpf_wq *wq))
+               int (callback_fn)(void *map, int *key, void *value))
 {
        struct hmap_elem init = {}, *val;
        struct bpf_wq *wq;
@@ -114,7 +117,7 @@ static int test_hmap_elem_callback(void *map, int *key,
 }
 
 /* callback for non sleepable workqueue */
-static int wq_callback(void *map, int *key, struct bpf_wq *work)
+static int wq_callback(void *map, int *key, void *value)
 {
        bpf_kfunc_common_test();
        ok |= (1 << *key);
@@ -122,10 +125,16 @@ static int wq_callback(void *map, int *key, struct bpf_wq *work)
 }
 
 /* callback for sleepable workqueue */
-static int wq_cb_sleepable(void *map, int *key, struct bpf_wq *work)
+static int wq_cb_sleepable(void *map, int *key, void *value)
 {
+       struct elem *data = (struct elem *)value;
+       int offset = data->ok_offset;
+
+       if (*key != offset)
+               return 0;
+
        bpf_kfunc_call_test_sleepable();
-       ok_sleepable |= (1 << *key);
+       ok_sleepable |= (1 << offset);
        return 0;
 }
 
index 4cbdb425f223d3354619a612c486432b321e59ed..25b51a72fe0fe6d0f1253e22e204aaf6c1946fc6 100644 (file)
@@ -28,14 +28,14 @@ struct {
 } lru SEC(".maps");
 
 /* callback for non sleepable workqueue */
-static int wq_callback(void *map, int *key, struct bpf_wq *work)
+static int wq_callback(void *map, int *key, void *value)
 {
        bpf_kfunc_common_test();
        return 0;
 }
 
 /* callback for sleepable workqueue */
-static int wq_cb_sleepable(void *map, int *key, struct bpf_wq *work)
+static int wq_cb_sleepable(void *map, int *key, void *value)
 {
        bpf_kfunc_call_test_sleepable();
        return 0;