Re: [PATCH net-next] selftests/net: Add two xdp tests to xdp.py
From: Jakub Kicinski
Date: Thu Apr 02 2026 - 10:40:09 EST
On Thu, 2 Apr 2026 11:22:15 +0800 Leon Hwang wrote:
> >> +def test_xdp_native_update_mb_to_sb(cfg):
> >> + obj = cfg.net_lib_dir / "xdp_dummy.bpf.o"
> >> +
> >> + _set_jumbo_mtu(cfg, 9000)
> >> +
> >> + attach = _exec_cmd(cfg, obj, "xdp.frags")
> >> + if attach.ret != 0:
> >> + output = attach.stderr.strip() or attach.stdout.strip()
> >> + raise KsftSkipEx(output or "device does not support multi-buffer XDP")
> >> +
> >> + defer(ip, f"link set dev {cfg.ifname} xdpdrv off")
> >> +
> >> + update1 = _exec_cmd(cfg, obj, "xdp.frags", "-force")
> >> + if update1.ret != 0:
> >> + raise KsftFailEx("device fails to update multi-buffer XDP")
> >> +
> >> + update2 = _exec_cmd(cfg, obj, "xdp", "-force")
> >> + if update2.ret == 0:
> >> + raise KsftFailEx("device unexpectedly updates non-multi-buffer XDP")
>
> From sashiko's review [1]:
>
> On architectures with larger page sizes, such as 16KB or 64KB on ARM64 or
> PowerPC, a 9000-byte packet can fit entirely within a single buffer. In
> these environments, the driver might legally accept a non-frag XDP program,
> which would lead to a false positive failure here.
Yes the test is indeed not checking all the corner cases, it should be:
# set mtu to 9k
# try attach xdp
# if ret == 0:
# return // must be 64k pages or something
# try attach xdp.frags
# if ret != 0:
# raise SKIP // driver doesn't support multi-buf
# defer xdp off
# try --froce switch to xdp
# if ret == 0:
# raise FAIL // replace is missing a check