]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xsk: Fix offset calculation in unaligned mode
authore.kubanski <e.kubanski@partner.samsung.com>
Wed, 16 Apr 2025 11:29:25 +0000 (13:29 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 25 Apr 2025 00:11:52 +0000 (17:11 -0700)
Bring back previous offset calculation behaviour
in AF_XDP unaligned umem mode.

In unaligned mode, upper 16 bits should contain
data offset, lower 48 bits should contain
only specific chunk location without offset.

Remove pool->headroom duplication into 48bit address.

Signed-off-by: Eryk Kubanski <e.kubanski@partner.samsung.com>
Fixes: bea14124bacb ("xsk: Get rid of xdp_buff_xsk::orig_addr")
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://patch.msgid.link/20250416112925.7501-1-e.kubanski@partner.samsung.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/xsk_buff_pool.h

index 3b243ea70e38a975337bf8b78b90613a07df2afa..cac56e6b0869b4a7d1b5a044f9ea23d3f1b5d70c 100644 (file)
@@ -240,8 +240,8 @@ static inline u64 xp_get_handle(struct xdp_buff_xsk *xskb,
                return orig_addr;
 
        offset = xskb->xdp.data - xskb->xdp.data_hard_start;
-       orig_addr -= offset;
        offset += pool->headroom;
+       orig_addr -= offset;
        return orig_addr + (offset << XSK_UNALIGNED_BUF_OFFSET_SHIFT);
 }