samples/bpf: xdp_redirect_cpu adjustment to reproduce teardown race easier [Linux 4.18]

This Linux kernel change "samples/bpf: xdp_redirect_cpu adjustment to reproduce teardown race easier" is included in the Linux 4.18 release. This change is authored by Jesper Dangaard Brouer <brouer [at] redhat.com> on Wed Aug 8 23:00:39 2018 +0200. The commit for this change in Linux stable tree is 37d7ff2 (patch).

samples/bpf: xdp_redirect_cpu adjustment to reproduce teardown race easier

The teardown race in cpumap is really hard to reproduce.  These changes
makes it easier to reproduce, for QA.

The --stress-mode now have a case of a very small queue size of 8, that helps
to trigger teardown flush to encounter a full queue, which results in calling
xdp_return_frame API, in a non-NAPI protect context.

Also increase MAX_CPUS, as my QA department have larger machines than me.

Tested-by: Jean-Tsung Hsiao <[email protected]>
Signed-off-by: Jesper Dangaard Brouer <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>

There are 6 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 samples/bpf/xdp_redirect_cpu_kern.c | 2 +-
 samples/bpf/xdp_redirect_cpu_user.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/samples/bpf/xdp_redirect_cpu_kern.c b/samples/bpf/xdp_redirect_cpu_kern.c
index 303e9e7..4938dcb 100644
--- a/samples/bpf/xdp_redirect_cpu_kern.c
+++ b/samples/bpf/xdp_redirect_cpu_kern.c
@@ -14,7 +14,7 @@
 #include <uapi/linux/bpf.h>
 #include "bpf_helpers.h"

-#define MAX_CPUS 12 /* WARNING - sync with _user.c */
+#define MAX_CPUS 64 /* WARNING - sync with _user.c */

 /* Special map type that can XDP_REDIRECT frames to another CPU */
 struct bpf_map_def SEC("maps") cpu_map = {
diff --git a/samples/bpf/xdp_redirect_cpu_user.c b/samples/bpf/xdp_redirect_cpu_user.c
index f6efaef..4b4d78f 100644
--- a/samples/bpf/xdp_redirect_cpu_user.c
+++ b/samples/bpf/xdp_redirect_cpu_user.c
@@ -19,7 +19,7 @@
 #include <arpa/inet.h>
 #include <linux/if_link.h>

-#define MAX_CPUS 12 /* WARNING - sync with _kern.c */
+#define MAX_CPUS 64 /* WARNING - sync with _kern.c */

 /* How many xdp_progs are defined in _kern.c */
 #define MAX_PROG 5
@@ -527,7 +527,7 @@ static void stress_cpumap(void)
     * procedure.
     */
    create_cpu_entry(1,  1024, 0, false);
-   create_cpu_entry(1,   128, 0, false);
+   create_cpu_entry(1,     8, 0, false);
    create_cpu_entry(1, 16000, 0, false);
 }

Leave a Reply

Your email address will not be published. Required fields are marked *