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

Reply via email to