Subject: Re: [PATCH net-next] selftests/net: Add two xdp tests to xdp.py

From: Jakub Kicinski <[email-masked]>
Date: Thu, 2 Apr 2026 07:35:20 -0700

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