From 9608fd5caefa97e8c224db3b10b1147e9fe3275f Mon Sep 17 00:00:00 2001 From: Richard Patel Date: Mon, 24 Aug 2026 04:01:27 +0000 Subject: [PATCH] ci: check build with old kernel headers --- .github/workflows/old_kernel_headers.yml | 26 ++++++++++++++++++++++++ src/waltz/xdp/fd_xsk.c | 6 +++--- src/waltz/xdp/fd_xsk.h | 23 ++++++++++++++++++++- 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/old_kernel_headers.yml diff --git a/.github/workflows/old_kernel_headers.yml b/.github/workflows/old_kernel_headers.yml new file mode 100644 index 00000000000..9f411d7f02b --- /dev/null +++ b/.github/workflows/old_kernel_headers.yml @@ -0,0 +1,26 @@ +name: Old Kernel Headers +on: + pull_request: +concurrency: + group: old-kernel-headers_${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +jobs: + check: + timeout-minutes: 5 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + + - name: Install old kernel headers + run: | + tmp="$(mktemp -d)" + trap 'rm -rf "$tmp"' EXIT + curl -sSfL --retry 3 -o "$tmp/libc-dev.deb" \ + "https://archive.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.19.249-2_amd64.deb" + ( cd "$tmp" && ar x libc-dev.deb && tar -xf data.tar.* ) + rm -rf kernel-headers && mkdir kernel-headers + mv "$tmp/usr/include" kernel-headers/include + mv kernel-headers/include/x86_64-linux-gnu/asm kernel-headers/include/asm + + - name: make check + run: make check -j EXTRA_CPPFLAGS="-isystem $PWD/kernel-headers/include" diff --git a/src/waltz/xdp/fd_xsk.c b/src/waltz/xdp/fd_xsk.c index 144e2957c99..649f597ec0e 100644 --- a/src/waltz/xdp/fd_xsk.c +++ b/src/waltz/xdp/fd_xsk.c @@ -60,7 +60,7 @@ fd_xsk_mmap_ring( fd_xdp_ring_t * ring, long map_off, ulong elem_sz, ulong depth, - struct xdp_ring_offset const * ring_offset ) { + fd_xdp_ring_offset_t const * ring_offset ) { /* TODO what is ring_offset->desc ? */ /* sanity check */ @@ -140,7 +140,7 @@ fd_xsk_fini( fd_xsk_t * xsk ) { if( FD_LIKELY( xsk->xsk_fd>=0 ) ) { /* Clear XSK descriptors */ - fd_memset( &xsk->offsets, 0, sizeof(struct xdp_mmap_offsets) ); + fd_memset( &xsk->offsets, 0, sizeof(fd_xdp_mmap_offsets_t) ); /* Close XSK */ close( xsk->xsk_fd ); xsk->xsk_fd = -1; @@ -191,7 +191,7 @@ fd_xsk_setup_umem( fd_xsk_t * xsk, # undef FD_SET_XSK_RING_DEPTH /* Request ring offsets */ - socklen_t offsets_sz = sizeof(struct xdp_mmap_offsets); + socklen_t offsets_sz = sizeof(fd_xdp_mmap_offsets_t); res = getsockopt( xsk->xsk_fd, SOL_XDP, XDP_MMAP_OFFSETS, &xsk->offsets, &offsets_sz ); if( FD_UNLIKELY( res!=0 ) ) { diff --git a/src/waltz/xdp/fd_xsk.h b/src/waltz/xdp/fd_xsk.h index feb75362135..ed5c2ac49aa 100644 --- a/src/waltz/xdp/fd_xsk.h +++ b/src/waltz/xdp/fd_xsk.h @@ -107,6 +107,27 @@ #include "../../util/fd_util_base.h" +#ifndef XDP_USE_NEED_WAKEUP +#define XDP_USE_NEED_WAKEUP (1<<3) +#endif + +#ifndef XDP_RING_NEED_WAKEUP +#define XDP_RING_NEED_WAKEUP (1u<<0) +#endif + +struct fd_xdp_ring_offset { + ulong producer; + ulong consumer; + ulong desc; + ulong flags; +}; +typedef struct fd_xdp_ring_offset fd_xdp_ring_offset_t; + +struct fd_xdp_mmap_offsets { + fd_xdp_ring_offset_t rx, tx, fr, cr; +}; +typedef struct fd_xdp_mmap_offsets fd_xdp_mmap_offsets_t; + /* FD_XSK_UMEM_ALIGN: byte alignment of UMEM area within fd_xsk_t. This requirement is set by the kernel as of Linux 4.18. */ #define FD_XSK_UMEM_ALIGN (4096UL) @@ -242,7 +263,7 @@ struct fd_xsk { /* Kernel descriptor of XSK rings in local address space returned by getsockopt(SOL_XDP, XDP_MMAP_OFFSETS) */ - struct xdp_mmap_offsets offsets; + fd_xdp_mmap_offsets_t offsets; /* AF_XDP socket file descriptor */ int xsk_fd;