From nobody Mon Sep 28 17:49:01 2026 Received: from mail-pj2-f8.google.com (mail-pj2-f8.google.com [74.125.227.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DC90481AA6 for ; Wed, 19 Aug 2026 16:05:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.136 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787155541; cv=none; b=qMxk7vNY6CCmH1Pb6XGn+8x8W/9JQclB3+1jH+ND/IyIpPROvXBLlPTM2/OtHtog5poXXOCMSUTUkQcxm8InUOCYjYbJrh89afsqsJYqPtZWdnJ+n+IE4J79LauuOC3jokDMGJvNfXvTGYuMHRZ9X7h4xEejUCXomngAAfng+NA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787155541; c=relaxed/simple; bh=2PLCByWGgAwhdeSGwInJPW8yjXmeKf4VnccaWVFyDiw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fuvoRd6BlZKNLeV6YixDAfRouq0569wOOLHmXR/ZPI2dVWX4Dt2PzAqga4tTA3uR6JPMijcd1iWckEdVEfS/LkFjSKMDx5OUSHfjmmaIHOgMyIL0/6Z/loLFx7c57UaUL8UzsAeKaoYdqMOKzYBBEjPtWBOzU8+6BOzS5cNr154= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I4r++4To; arc=none smtp.client-ip=74.125.227.136 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I4r++4To" Received: by mail-pj2-f8.google.com with SMTP id 98e67ed59e1d1-38fd9408220so402296a91.1 for ; Wed, 19 Aug 2026 09:05:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787155539; x=1787760339; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=e7rQxNaXNWqb2c9lwuccfrB1MuTuQX8j+1HrCiB3XiE=; b=I4r++4Toa7TpOYhfu0AAjKAiDOoEBpYuAXB4f09fwwzc0G76OxMtJ5TpEtZXVwgKIX OP3S/lAoHgO+3tMp+eaxZaJw5XiZ3v6PkOIomnIvHVITNlkG7hGr5svI8kW+R+IrJSn3 PuJ2MG8TSg4slbA5Z+03+VDdIawGvw7xe0HW2XT0VMXcqLcKdYKEBfedl23qVFu7qg8B 5nz8rq5pR2F7Rs5OOAyEOY+XkbwgU/6n7IcOcXQLepn3OkcCUzpTqHmtuGwOUBljg7Dk AF4Nnnu9kib8gBzBk0UZXBeJ/g3BoX10BVSvun9kmhHANvx2o3oKPu85BPnyqGPz06MY +moQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787155539; x=1787760339; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=e7rQxNaXNWqb2c9lwuccfrB1MuTuQX8j+1HrCiB3XiE=; b=dofJkIIXFpk26TyQUUPQDYoAzWciXpyd5vLZYlidAsSGzBrx13sN/HjZnqk2+K7Quu Ps07d+KjKyvjbPUHzGtAT1BndmzJpx13kPKc8j/j54PPFn++G7lsYZgjnt0k98mLR+1E /E1yvieTWozYKT9Ei/wIC14tmfcbYyOJx/2yyejzkIizEiHzYhm6+9B2kBiJijQyiNit 3sRLYDye57dkRqb9uCdPpv9M3+7pISg4LhEA5svKvWo7gi6Dpub3aMJb+/tuLCaonpR1 uBbCcpZyOTZu/nyr7NhIouC5UjdLVALDjRffp8QVPvUAK8oLIoYIIuj9iP8tU1VNzW5C IJSQ== X-Forwarded-Encrypted: i=1; AHgh+RrgQppylH8gSBFAEIbkJh2Eh5pyh7su7vbN+spWzfjPGYaT5hKbV3TNnpSxDfYtdDDegiWQZTWZH9nvCbc=@vger.kernel.org X-Gm-Message-State: AFuF++lL0duJmI651vEMpQodKktGVVnRu3HSs3XnXMJH2Z1L/kr2Cri+ VF3aF322pf+t4yc7C/sh+XubUkcM9ZEEpq+oENx1XeXg7zt5n2papjXs X-Gm-Gg: AR+sD11NKY/tXvyE/e+NM3wmM86M5oH3QOcMI/u+7hI4hm6kzFk1mu2kkK/eJyALHB3 E6A0C2rVxhZTW777AXZ5EBMZ8vgqUSlGmhE9+wJtFt6bC6PhLbUTb2czC+wMleDJ4rDt+CT/Ihh K60NNosCULpVKH3z1c696R6miVN8+wB1RiacdP7Mssha1P8iIqLmrVo9mCQ9hTk0wdOQdCqnoEq v6Bf4w4O/8cSm1vDREuUxq/ab9uNttKadrTpwuO/ovb39zK2B9Ih8cuOr8vEcLtDjeGIDsIOzQ8 AB8qadqAKwP/Vo4ChpXcy/nDj4dr1upHLrPTV4Db7YzsFyHH0SKT3OXtiQcTFNyFWZ+kYReGjxj MI0/G/eM8IW0en0ewZCxwqYq1ghmdtTyd37NJNZkXJvL/IpNokxU9j3xM0zZ69+x77RAbaDWCXx LrtntywkNTh9B8bnTB7FtOYnzQidHluG9Zv2us/7+z/cQBiueQLvVtXA== X-Received: by 2002:a17:90b:4d0b:b0:38c:a59b:5189 with SMTP id 98e67ed59e1d1-3958127d8bdmr9857765a91.15.1787155538709; Wed, 19 Aug 2026 09:05:38 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:54::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3957faf6849sm3011405a91.10.2026.08.19.09.05.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 09:05:38 -0700 (PDT) From: Stanislav Fomichev X-Google-Original-From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, andrew+netdev@lunn.ch, saeedm@nvidia.com, tariqt@nvidia.com, mbloch@nvidia.com, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, aleksander.lobakin@intel.com, horms@kernel.org, magnus.karlsson@intel.com, maciej.fijalkowski@intel.com, sdf@fomichev.me, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, guoren@kernel.org, dtatulea@nvidia.com, witu@nvidia.com, martin.lau@kernel.org, yoong.siang.song@intel.com, intel-wired-lan@lists.osuosl.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, bpf@vger.kernel.org, linux-csky@vger.kernel.org, leon@kernel.org Subject: [PATCH net v3 1/3] xsk: align TX metadata layout across ABIs Date: Wed, 19 Aug 2026 09:05:33 -0700 Message-ID: <20260819160535.1472459-2-sdf@fomichev.me> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260819160535.1472459-1-sdf@fomichev.me> References: <20260819160535.1472459-1-sdf@fomichev.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add explicit padding before launch_time so xsk_tx_metadata has the same layout on 32-bit and 64-bit systems. On several architectures (csky, i386, nios2, m65k, openrisc, sh), the old native 32-bit layout put launch_time at offset 12 and had a natural size of 20 bytes. Using sizeof(struct xsk_tx_metadata) as tx_metadata_len was alrea= dy rejected because the length must be a multiple of eight, so the straightforward use of the interface was broken on those ABIs. Userspace could still register a padded length of 24 bytes, though; mixing the old and new layouts then silently reads launch_time from the wrong offset and misprograms packet launch times. This intentionally replaces that incompatible layout because the affected architectures are unlikely to have any notable users. (x86_64 and arm64 have the most users and are _not_ affected) Fixes: ca4419f15abd ("xsk: Add launch time hardware offload support to XDP = Tx metadata") Reviewed-by: Simon Horman Signed-off-by: Stanislav Fomichev --- include/uapi/linux/if_xdp.h | 1 + tools/include/uapi/linux/if_xdp.h | 1 + 2 files changed, 2 insertions(+) diff --git a/include/uapi/linux/if_xdp.h b/include/uapi/linux/if_xdp.h index 23a062781468..50d67df78911 100644 --- a/include/uapi/linux/if_xdp.h +++ b/include/uapi/linux/if_xdp.h @@ -149,6 +149,7 @@ struct xsk_tx_metadata { __u16 csum_start; /* Offset from csum_start where checksum should be stored. */ __u16 csum_offset; + __u32 reserved; =20 /* XDP_TXMD_FLAGS_LAUNCH_TIME */ /* Launch time in nanosecond against the PTP HW Clock */ diff --git a/tools/include/uapi/linux/if_xdp.h b/tools/include/uapi/linux/i= f_xdp.h index 23a062781468..50d67df78911 100644 --- a/tools/include/uapi/linux/if_xdp.h +++ b/tools/include/uapi/linux/if_xdp.h @@ -149,6 +149,7 @@ struct xsk_tx_metadata { __u16 csum_start; /* Offset from csum_start where checksum should be stored. */ __u16 csum_offset; + __u32 reserved; =20 /* XDP_TXMD_FLAGS_LAUNCH_TIME */ /* Launch time in nanosecond against the PTP HW Clock */ --=20 2.53.0-Meta From nobody Mon Sep 28 17:49:01 2026 Received: from mail-pz2-f1.google.com (mail-pz2-f1.google.com [74.125.228.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 050C0484243 for ; Wed, 19 Aug 2026 16:05:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787155543; cv=none; b=KslRTqajHP89W2ldDXaZPe4gaG3XwlKjZXy/Bk4F6l/uaeJKTpJ9FEkLM7vF8JOwj1YIRmmfCsJt4MXsjuS/7osmprosnB1FW3zfgRousFTk2dPZHY9PcJOhRcYi0QD1ymX9FmHTQybzfQv751lZu98qdzyq6x0Io4h4000SKLM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787155543; c=relaxed/simple; bh=h/yRTy+q/aTNWgdAyARpnxO02skNFXM6ZPvX24ue7RU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NSrXLAfzBusBniiHH9+3t76aUFZsPoy8xs8xJCZVb4hs1wPeQGxJ4TgexRoORdbX+bUthKfHT7amu7iYzynpH4uIk56nXqTY1+rzaF76ep3cZ4FIdC6aPYn6WN8/yxTlt06BUl1mGBNm3MiHLvKYKLnsClbnHMCb4g++6WX3a8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SqKnIAEV; arc=none smtp.client-ip=74.125.228.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SqKnIAEV" Received: by mail-pz2-f1.google.com with SMTP id 41be03b00d2f7-cbb8ebaca74so480374a12.1 for ; Wed, 19 Aug 2026 09:05:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787155540; x=1787760340; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=knHPZ2hqDlF6r7lICpyiSankCSnQUl1ZecmnK0yjr1w=; b=SqKnIAEVzE6ey1YH6WKmKdq8rqQVdIJ82Zu8D/ppptSaaf18B6po5czRgTNQ8FMYAS bjx3QNg91iHQ19+oz0q/qOVzuy2flTwPjrBtrjhUonc0doeAet3vAAIgr/8qnngn9Jiw OlfHAtXMNbAmZJRhY1BVHtfSr9/6KX4r2j2MXatRTg7pSR7HBnB4eC700bH3mSS1JVWf IunyYKl2gkewa+WFuhJQjtQYYzJU6Pa1JA2OZCF9hfmFoDYxdMEWRNCwCfxCEdyqJmct DaCC8hXQ6If10Ko/o/39jxsCf/NZoFAGoE4tE/Yez3SPcSDO7zWttMt6Cl5juPUUqp0F tfvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787155540; x=1787760340; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=knHPZ2hqDlF6r7lICpyiSankCSnQUl1ZecmnK0yjr1w=; b=WCV/m0z9G46iVdxnmdSdxl0o1aBxuUfsCp0i/QaIX9wfqr9+SJnKul+NyII8v7mCP4 kc4+o/0SwLtR8dwQo/H35SKWfw8qtpd1gk+nS2wGgtx9s9wmPTLXzLvWi5nIPj8ZzzRZ YPpcTWfKRItsGuoQXImjRV8mgD+9UYy+v3d8uPMZ+n507HndEElDr0GLq7eJ/CBvZjWZ Lsh+rXUj74xhJwIWjlW245A/POtXtFlDHaVZh6pUc/q5+2cJSLcmQVL7uinjFwgCCQMc 4z+h6lUaPArWYjVtXor8dcfMUny4QSD9rcPJ2MnfymjEb2uM57FztQpua5xjUU2lj4Yx Dyyg== X-Forwarded-Encrypted: i=1; AHgh+Roigxg4RninMm1RUkZj+wUWLAY5nTPkSQ5xM7bPqijA5pLc4BHDcMzQy1UfdT53Mo3cBLHK5ODsgFsLKSs=@vger.kernel.org X-Gm-Message-State: AOJu0YzB27ATC94LF5zbfOeSsmpbXWwrdLHOS6SIQdo6TLU2QcsrZxiT Vih9cKtShB4e8/aWK6q7nLnElRBxSnMzaax4eG8J35KYHADCTR3ALUmE X-Gm-Gg: AR+sD11Ae0qyylDU+s2pKdXnnfIGdIN0EOlciYYT3KXLlA0HwLpPoX3kwgWJLlvqXO1 55XL2qIog8Yj/fQBO5UkOUkH1ZH6vH1NwQ3OHnK2xu9KRb+Y002xoJHTLQZrO0a7PkYVzo/on7S 3hDhWPmXcuEirm/fTQGZSZ9W8rW+TT+Fne11Iuqpk1a1EqeaAZzA4DL4Evzid79mGvRWMYQAfUx XCm5DygYYWraseeH8O0w6rNwlr1/NINH96Pd/H5reWnAaA6Bp6PAyIhml7PhHAtR7Olz5icvs0R FLWO0+ckKRRZ53IXtFsWC6UJGzLoDCq/eU3/w/wPyJC4SXNhylH2i9/sJcvoOJiIuZe/+6err0w c8/qsBpPRkZ0DrrUrJvmr93AOhx0VUw3VFBGcqNxq2NUlA5k6KZFZanRGJgW4zV/1uvf3fK0L6n V7nLzMb97x3AJdUTWuNn8djpdvpGMYMW6pMQCnHmhd7qc4uZEldGfEvEKbI+2I77Za X-Received: by 2002:a05:6a00:bd90:b0:848:2e7e:353a with SMTP id d2e1a72fcca58-851d3481104mr8568063b3a.0.1787155540004; Wed, 19 Aug 2026 09:05:40 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:46::]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-851d33b82bbsm857116b3a.24.2026.08.19.09.05.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 09:05:39 -0700 (PDT) From: Stanislav Fomichev X-Google-Original-From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, andrew+netdev@lunn.ch, saeedm@nvidia.com, tariqt@nvidia.com, mbloch@nvidia.com, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, aleksander.lobakin@intel.com, horms@kernel.org, magnus.karlsson@intel.com, maciej.fijalkowski@intel.com, sdf@fomichev.me, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, guoren@kernel.org, dtatulea@nvidia.com, witu@nvidia.com, martin.lau@kernel.org, yoong.siang.song@intel.com, intel-wired-lan@lists.osuosl.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, bpf@vger.kernel.org, linux-csky@vger.kernel.org, leon@kernel.org Subject: [PATCH net v3 2/3] xsk: honor XDP_TX_METADATA in zero-copy path Date: Wed, 19 Aug 2026 09:05:34 -0700 Message-ID: <20260819160535.1472459-3-sdf@fomichev.me> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260819160535.1472459-1-sdf@fomichev.me> References: <20260819160535.1472459-1-sdf@fomichev.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The zero-copy path reads TX metadata whenever the UMEM has metadata space, even if the descriptor does not set XDP_TX_METADATA. Pass descriptor options through the metadata helpers and ignore metadata unless the option is set. This does not fix the existing per-WQE metadata handling for mlx5 MPWQEs. Only the descriptor that starts a session passes through xsk_tx_metadata_request() and configures offload state shared by the batch. Metadata on descriptors joining an open session is therefore not validated and does not configure its requested offloads. In addition, a non-NULL metadata pointer from such a descriptor is treated as a timestamp completion request even when XDP_TXMD_FLAGS_TIMESTAMP is not set, so its metadata union can be overwritten with an unrequested timestamp. Fixing mixed metadata states within one MPWQE requires a separate change. Fixes: 48eb03dd2630 ("xsk: Add TX timestamp and TX checksum offload support= ") Reviewed-by: Alexander Lobakin Signed-off-by: Stanislav Fomichev Reviewed-by: Aleksandr Loktionov Reviewed-by: Maciej Fijalkowski --- drivers/net/ethernet/intel/igc/igc_main.c | 3 ++- .../ethernet/mellanox/mlx5/core/en/xsk/tx.c | 2 +- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 3 ++- include/net/libeth/xsk.h | 2 +- include/net/xdp_sock_drv.h | 22 +++++++++++-------- include/net/xsk_buff_pool.h | 3 ++- net/xdp/xsk_buff_pool.c | 7 ++++-- 7 files changed, 26 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethern= et/intel/igc/igc_main.c index 39043d8ca1bf..59067939a586 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -3074,7 +3074,8 @@ static void igc_xdp_xmit_zc(struct igc_ring *ring) olinfo_status =3D xdp_desc.len << IGC_ADVTXD_PAYLEN_SHIFT; =20 dma =3D xsk_buff_raw_get_dma(pool, xdp_desc.addr); - meta =3D xsk_buff_get_metadata(pool, xdp_desc.addr); + meta =3D xsk_buff_get_metadata(pool, xdp_desc.addr, + xdp_desc.options); xsk_buff_raw_dma_sync_for_device(pool, dma, xdp_desc.len); bi =3D &ring->tx_buffer_info[ntu]; =20 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/tx.c b/drivers/= net/ethernet/mellanox/mlx5/core/en/xsk/tx.c index 3d19dad8f868..d194eeddd7b5 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/tx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/tx.c @@ -99,7 +99,7 @@ bool mlx5e_xsk_tx(struct mlx5e_xdpsq *sq, unsigned int bu= dget) xdptxd.dma_addr =3D xsk_buff_raw_get_dma(pool, desc.addr); xdptxd.data =3D xsk_buff_raw_get_data(pool, desc.addr); xdptxd.len =3D desc.len; - meta =3D xsk_buff_get_metadata(pool, desc.addr); + meta =3D xsk_buff_get_metadata(pool, desc.addr, desc.options); =20 xsk_buff_raw_dma_sync_for_device(pool, xdptxd.dma_addr, xdptxd.len); =20 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/ne= t/ethernet/stmicro/stmmac/stmmac_main.c index a71f0df26378..62de03e65a90 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -2719,7 +2719,8 @@ static bool stmmac_xdp_xmit_zc(struct stmmac_priv *pr= iv, u32 queue, u32 budget) =20 tx_desc =3D stmmac_get_tx_desc(priv, tx_q, entry); dma_addr =3D xsk_buff_raw_get_dma(pool, xdp_desc.addr); - meta =3D xsk_buff_get_metadata(pool, xdp_desc.addr); + meta =3D xsk_buff_get_metadata(pool, xdp_desc.addr, + xdp_desc.options); xsk_buff_raw_dma_sync_for_device(pool, dma_addr, xdp_desc.len); =20 /* To return XDP buffer to XSK pool, we simple call diff --git a/include/net/libeth/xsk.h b/include/net/libeth/xsk.h index 5dcc0d7f65b7..a452b7828ce4 100644 --- a/include/net/libeth/xsk.h +++ b/include/net/libeth/xsk.h @@ -196,7 +196,7 @@ __libeth_xsk_xmit_fill_buf_md(const struct xdp_desc *xd= esc, struct libeth_xdp_tx_desc desc; struct xdp_desc_ctx ctx; =20 - ctx =3D xsk_buff_raw_get_ctx(sq->pool, xdesc->addr); + ctx =3D xsk_buff_raw_get_ctx(sq->pool, xdesc->addr, xdesc->options); desc =3D (typeof(desc)){ .addr =3D ctx.dma, __libeth_xdp_tx_len(xdesc->len), diff --git a/include/net/xdp_sock_drv.h b/include/net/xdp_sock_drv.h index b344789f5df8..d94aeb506379 100644 --- a/include/net/xdp_sock_drv.h +++ b/include/net/xdp_sock_drv.h @@ -240,6 +240,7 @@ static inline void *xsk_buff_raw_get_data(struct xsk_bu= ff_pool *pool, u64 addr) * xsk_buff_raw_get_ctx - get &xdp_desc context * @pool: XSk buff pool desc address belongs to * @addr: desc address (from userspace) + * @options: desc options (from userspace) * * Wrapper for xp_raw_get_ctx() to be used in drivers, see its kdoc for * details. @@ -248,9 +249,9 @@ static inline void *xsk_buff_raw_get_data(struct xsk_bu= ff_pool *pool, u64 addr) * pointer, if it is present (initialized to %NULL otherwise). */ static inline struct xdp_desc_ctx -xsk_buff_raw_get_ctx(const struct xsk_buff_pool *pool, u64 addr) +xsk_buff_raw_get_ctx(const struct xsk_buff_pool *pool, u64 addr, u32 optio= ns) { - return xp_raw_get_ctx(pool, addr); + return xp_raw_get_ctx(pool, addr, options); } =20 #define XDP_TXMD_FLAGS_VALID ( \ @@ -318,18 +319,20 @@ xsk_tx_metadata_request(const struct xsk_buff_pool *p= ool, } =20 static inline struct xsk_tx_metadata * -__xsk_buff_get_metadata(const struct xsk_buff_pool *pool, void *data) +__xsk_buff_get_metadata(const struct xsk_buff_pool *pool, void *data, + unsigned int options) { - if (!pool->tx_metadata_len) + if (!pool->tx_metadata_len || !(options & XDP_TX_METADATA)) return NULL; =20 return data - pool->tx_metadata_len; } =20 static inline struct xsk_tx_metadata * -xsk_buff_get_metadata(struct xsk_buff_pool *pool, u64 addr) +xsk_buff_get_metadata(struct xsk_buff_pool *pool, u64 addr, u32 options) { - return __xsk_buff_get_metadata(pool, xp_raw_get_data(pool, addr)); + return __xsk_buff_get_metadata(pool, xp_raw_get_data(pool, addr), + options); } =20 static inline void xsk_buff_dma_sync_for_cpu(struct xdp_buff *xdp) @@ -510,7 +513,7 @@ static inline void *xsk_buff_raw_get_data(struct xsk_bu= ff_pool *pool, u64 addr) } =20 static inline struct xdp_desc_ctx -xsk_buff_raw_get_ctx(const struct xsk_buff_pool *pool, u64 addr) +xsk_buff_raw_get_ctx(const struct xsk_buff_pool *pool, u64 addr, u32 optio= ns) { return (struct xdp_desc_ctx){ }; } @@ -530,13 +533,14 @@ xsk_tx_metadata_request(const struct xsk_buff_pool *p= ool, } =20 static inline struct xsk_tx_metadata * -__xsk_buff_get_metadata(const struct xsk_buff_pool *pool, void *data) +__xsk_buff_get_metadata(const struct xsk_buff_pool *pool, void *data, + unsigned int options) { return NULL; } =20 static inline struct xsk_tx_metadata * -xsk_buff_get_metadata(struct xsk_buff_pool *pool, u64 addr) +xsk_buff_get_metadata(struct xsk_buff_pool *pool, u64 addr, u32 options) { return NULL; } diff --git a/include/net/xsk_buff_pool.h b/include/net/xsk_buff_pool.h index 2bb1d122b1bc..a7df573784fd 100644 --- a/include/net/xsk_buff_pool.h +++ b/include/net/xsk_buff_pool.h @@ -154,7 +154,8 @@ struct xdp_desc_ctx { struct xsk_tx_metadata *meta; }; =20 -struct xdp_desc_ctx xp_raw_get_ctx(const struct xsk_buff_pool *pool, u64 a= ddr); +struct xdp_desc_ctx xp_raw_get_ctx(const struct xsk_buff_pool *pool, u64 a= ddr, + u32 options); =20 static inline dma_addr_t xp_get_dma(struct xdp_buff_xsk *xskb) { diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c index 78c14f106395..9d2d94f1fb75 100644 --- a/net/xdp/xsk_buff_pool.c +++ b/net/xdp/xsk_buff_pool.c @@ -763,6 +763,7 @@ EXPORT_SYMBOL(xp_raw_get_dma); * xp_raw_get_ctx - get &xdp_desc context * @pool: XSk buff pool desc address belongs to * @addr: desc address (from userspace) + * @options: desc options (from userspace) * * Helper for getting desc's DMA address and metadata pointer, if present. * Saves one call on hotpath and double calculation of the actual address. @@ -771,14 +772,16 @@ EXPORT_SYMBOL(xp_raw_get_dma); * Return: new &xdp_desc_ctx struct containing desc's DMA address and meta= data * pointer, if it is present (initialized to %NULL otherwise). */ -struct xdp_desc_ctx xp_raw_get_ctx(const struct xsk_buff_pool *pool, u64 a= ddr) +struct xdp_desc_ctx xp_raw_get_ctx(const struct xsk_buff_pool *pool, u64 a= ddr, + u32 options) { struct xdp_desc_ctx ret; =20 addr =3D __xp_raw_get_addr(pool, addr); =20 ret.dma =3D __xp_raw_get_dma(pool, addr); - ret.meta =3D __xsk_buff_get_metadata(pool, __xp_raw_get_data(pool, addr)); + ret.meta =3D __xsk_buff_get_metadata(pool, __xp_raw_get_data(pool, addr), + options); =20 return ret; } --=20 2.53.0-Meta From nobody Mon Sep 28 17:49:01 2026 Received: from mail-pj2-f10.google.com (mail-pj2-f10.google.com [74.125.227.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE9C64854FD for ; Wed, 19 Aug 2026 16:05:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.138 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787155544; cv=none; b=B4GnMElk4NVmDiqSusc0jHFC8z6e/vpFPlN/qjq1TnaRWCJ7LttnfoyomcELmRdqFh6JfefkuV3lrDypiULpALLxg2l8aa4daoETLeOS5vIKZUbWQPdtOU5dCt1GK2u5YT0n2y4wSudyf3/uWMyqlWqXHiv0B98no/WzQZ/CG4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787155544; c=relaxed/simple; bh=cQTwj67zy7Laq/EhHZBENAZnhoe0otCikzM/pbJIwzE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QQc2ct1sDQ5dYfuxY8pyaWqA0759HLCtsyggfqAogp+PLa60u3opL8Nd1OwOG+ruCrGQRCfCr8iwF8zcEm37OaXuwclP8LOdz0tuaIqcnDRFJMDpa0pam/v3P4WEiDJgkw8b4UgtGnoeZ5JGxaaCklgotMCF/uD6wvfRCaEqkpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nTESn9Xd; arc=none smtp.client-ip=74.125.227.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nTESn9Xd" Received: by mail-pj2-f10.google.com with SMTP id 98e67ed59e1d1-38dc4f9462cso392049a91.0 for ; Wed, 19 Aug 2026 09:05:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787155541; x=1787760341; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CKdPBJAuwbKNHRSj/o9wx9GTRe/KKjDR+X94RAURNcg=; b=nTESn9XdI2bnT31A6rjMNe8XOps2FXnK2IdAMHwlZb66qHA9q//IzNOCds//X13m4B B6M533AYGYZn7B6ZkSBwBY9bk79Qb9qtedfroxLfFnL/9mHVtkh0SBqanWw/qRCcyhbx PXbKjmjmLfw3hYUAabnJ9NCcDg/zAD+yGlBwfKsC6ECinw5bcm5N/+w6otEJNGeXFyHk iy4JDjS4WVwRVSbIp3NF8XzH9D2dP7UC3Z3G6SOWW03oeRyohkMixfQ5oA/YFtEw01Dw K8sxUreEQBJ4EuFDNL/6tFJa9WEblqVFlaJh0DsQt+AdpXWsobqDoFgcMwwe8JqPJWwb CiXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787155541; x=1787760341; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=CKdPBJAuwbKNHRSj/o9wx9GTRe/KKjDR+X94RAURNcg=; b=eJjaBbC1KsO1Ck020eFSr961C8CczV7mdB6URZ8/vja3C63HNXUTCgab1HLP7ksMd4 Q5THldGR9tvXQQK8s1WfGk1gQybnZTgYArqw5g+0i8KOc4cFfL0U2MjPb7QDUsgqgQLr yLmpC09kuN0h8rre85OGjcckCPfzYlNBZY5lud2kchRmB5HdrKbn1BTDPMy6+66bsM6T 9TdPhjMosGg7tvJCO5C+tk0sG/Sv4SWQh5vGpn8CJ/MXug/N5gR+6gc2H36FveU0zAFA WTGHTyEXEHmLwzz32ZYm9V53URVY8ngGHjgqdFJuC8nUeP+PwBQrNtFk2L3AeJOSy/S7 EltQ== X-Forwarded-Encrypted: i=1; AHgh+RrBRuSsJYmJmq1ODvwc1qSXhOFcD9xzI0mG/wv+V0Ls7QM3JGLPo86lpoL8RyHGUCHKGsfeK6O3QJyc8kk=@vger.kernel.org X-Gm-Message-State: AFuF++ljRutC/8dc0NA6z85/hQU3v/Y5VEQ5PaPanSfIMxT3AcANedHs KFT3cZ/tkDLnbTkmxHmZMozOFCGxNmBdXqHVFuNcEDCrGm2JWDOmtilT X-Gm-Gg: AR+sD13ocfWQg7Njl0WxnYsY4B1+CwZj5vsJpw0zaPk01bI2CZBntn8P1742G19kXd9 uDoX3lENTl37AXHjs89uneEES1jNS0ZJ1is4OrX4MITakH6WdJ31zVUE6k1BeS5lLZwK8qO3AFz fsuNijf1FDb40fiC7rmY+ZBB1Xm8PzInBriJjsLtoGO1DZwqmlSfbR6tsZnP48q9HBDTQwwimxf IEtKtqwg5Y0qX3LapWGHC+WKaq3x82C3CHGRKt2wMB5ymJH+Qolf67JxZiLkRgY5iPilhE08VvZ b/aS7QYm101fAfLjfN3+hH7bjw64JlmoUCcqfXxtwhpR04G4+wEl6sunXhwamVe6JHpVs2yYcaW 06ns/6cR4J9AAfUI2NeTnbAnSbncT0AOpB6y1GhSblUN7nOT2vJEXsCG0N3IXJ8rYrZxdhDv3Mg JJJw2InYNvTLCg3SfkO/4Y0mC2GkJRCtOcbQlb8q3KfDVBpeHm4z0WeIOqlYB+BjvX X-Received: by 2002:a17:90b:3fc4:b0:38e:11ba:992c with SMTP id 98e67ed59e1d1-3958110c755mr10914058a91.12.1787155541199; Wed, 19 Aug 2026 09:05:41 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:4f::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3957fb17eb5sm3740911a91.3.2026.08.19.09.05.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 09:05:40 -0700 (PDT) From: Stanislav Fomichev X-Google-Original-From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, anthony.l.nguyen@intel.com, przemyslaw.kitszel@intel.com, andrew+netdev@lunn.ch, saeedm@nvidia.com, tariqt@nvidia.com, mbloch@nvidia.com, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, aleksander.lobakin@intel.com, horms@kernel.org, magnus.karlsson@intel.com, maciej.fijalkowski@intel.com, sdf@fomichev.me, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, guoren@kernel.org, dtatulea@nvidia.com, witu@nvidia.com, martin.lau@kernel.org, yoong.siang.song@intel.com, intel-wired-lan@lists.osuosl.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, bpf@vger.kernel.org, linux-csky@vger.kernel.org, leon@kernel.org Subject: [PATCH net v3 3/3] net: stmmac: document oversized AF_XDP frame handling Date: Wed, 19 Aug 2026 09:05:35 -0700 Message-ID: <20260819160535.1472459-4-sdf@fomichev.me> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260819160535.1472459-1-sdf@fomichev.me> References: <20260819160535.1472459-1-sdf@fomichev.me> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" stmmac drops AF_XDP zero-copy frames that exceed taprio's queueMaxSDU after xsk_tx_peek_desc() has reserved their completion entries. Completing a rejected descriptor is unsafe because AF_XDP completions are ordered: xsk_tx_completed(pool, 1) would complete the oldest outstanding descriptor, which may still be owned by hardware. Instead, leave the completion pending so the ring eventually wedges and increment the drop counter to expose the application error without risking hardware misbehavior. Document this intentional ring imbalance at the check. Signed-off-by: Stanislav Fomichev --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/ne= t/ethernet/stmicro/stmmac/stmmac_main.c index 62de03e65a90..6a532747c039 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -2713,6 +2713,10 @@ static bool stmmac_xdp_xmit_zc(struct stmmac_priv *p= riv, u32 queue, u32 budget) if (priv->est && priv->est->enable && priv->est->max_sdu[queue] && xdp_desc.len > priv->est->max_sdu[queue]) { + /* Completions are ordered, so this descriptor cannot + * be completed safely. Wedge the ring to expose the + * application error instead. + */ priv->xstats.max_sdu_txq_drop[queue]++; continue; } --=20 2.53.0-Meta