From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C247848B59 for ; Thu, 20 Nov 2025 13:45:34 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BEED140262; Thu, 20 Nov 2025 13:45:34 +0100 (CET) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mails.dpdk.org (Postfix) with ESMTP id 9E8A140262 for ; Thu, 20 Nov 2025 13:45:33 +0100 (CET) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-42b3ac40ae4so475138f8f.0 for ; Thu, 20 Nov 2025 04:45:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763642733; x=1764247533; darn=dpdk.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; bh=Ev2fG3NZiKBF5hsM6RVUyKTRe4zb6KvZRg/YWe1PkTw=; b=HDJ/eklkgdoJi0ea7At9C7rtuJfeA+rXcp0x31SfqcNvOGpp3wgxKOIsoSwLvup42N +T7u7sesV4rCgCj4wUX5UUguTOC3zbF2SErZxxceZgM3wNcQgwJkaP6EWPXsAuXAdPnX vXZdYVrNM4mqyfee6bl+Y/x+hCndMZeKYCX8kW09e8DBcQMNO3O5JxcoXkC0ioL5t607 JoPDZl5dhxnobnRZga13uMzBZg6YNw7+Rwukmw3zpvTvEkGQQETn0zSfV7EBA9CEnW9h g0I4h8VO7IctiWYZ2tcZr6gldJ58UO5w4C6b+6eex1GriEAerUNlfGGKppltQ1tRUXwi dyrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763642733; x=1764247533; 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; bh=Ev2fG3NZiKBF5hsM6RVUyKTRe4zb6KvZRg/YWe1PkTw=; b=VaxjqGSNuBIED4wvlRVeAgLLEHYvQAbDdrsRtymZdtuOD6anCNj5Er2tj3W9F3URYW PwjXds1woyjbvmMzzVYwLn4NR/L5dodk5SYZeZr9Yrh1u9euN7KtpvxImIeaCrd28omk Y6v04XT+JyVYWer44yV94sDVXT7h0Q3PJx2jDs9wl+czt6vbWVUqBlU5FjE7G/rf+/tE Ua9jFySKrLOmYmxz/uYIEwpXAkM1rNZLkrtqfb+/X78+zio3RIKCqbKixYm3ju2U4KeU XinmOGGE77J7jZMnUPsfaWVaGs2eSdoEbH1D/6sw2JJb/MQcH8ybWZPhwyB/nD2LoAFh ZPTQ== X-Forwarded-Encrypted: i=1; AJvYcCXl7e0TzwWpZOnR1Pg3yKpoRf+rm7Dy3TxbaI2jF/RYwUJFckJON+7MO0utVbmK1S9BQciJ4x4=@dpdk.org X-Gm-Message-State: AOJu0Yy3AIKwdMQV5YpVEmWwrW60bTeI0BHmWu7lkWkhcE9KZbjySXvP /UmTyIx5V0BVtPP64mUaN4a+kDxQOHQxkQ5EHEtuOMMM85uEL1CcwP9I X-Gm-Gg: ASbGncv0D+3QfgBdkwLhFeOI5TuES98cvbz340YyOkJA0enh9sttzRddh7KRtA9DrxR 0TKxHzuK1Dycp1zY+uhG9776EXnFQKcFnRdmrwYwRnuL0fxqrfvCUeiRmWtfPD5HGbRK8dfrqZ6 yBu0ayUXYvhtBdTw9d/Zi9XMNOkX6Bl4e67FB/+oYswIfsb7SIQ90PdTmdc7uIspVw0H0Fbxkhu jBF5ILE9qUNBck74Cp29rcqwV4SyKu7pUMSsY2dbNOR///3N2AmQolfZCGZhwNN25Y50zJLauBa TiD/CfeaK/b+g+km3ABIHN032sIN+5CneGaybuZUK8hOJeRzp456cEvsuqi5Ny3PMSKcIY9RG7p ddSNZOM78GhdrW/b+SnVeJ5fGNh/1KWN+0cPrNl+iM9gWqYk2VPDBiFcTZvv6aNKJlrJhQTp4yX W3Y3zAmOfv17nhtd3vl84b+hjngNo= X-Google-Smtp-Source: AGHT+IFzPGG21Bh9LO+H38VK6Rwl90YNF53al1to4YJ+JmNX0FtXTSduFaS3n14e+COrsD+CDmDZnA== X-Received: by 2002:a05:6000:4283:b0:429:d6fa:da32 with SMTP id ffacd0b85a97d-42cb9a57333mr2807672f8f.59.1763642733017; Thu, 20 Nov 2025 04:45:33 -0800 (PST) Received: from localhost ([2a01:4b00:d036:ae00:f372:8d1a:399f:e8a2]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-42cb7f363e4sm5271085f8f.12.2025.11.20.04.45.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Nov 2025 04:45:32 -0800 (PST) From: luca.boccassi@gmail.com To: Jacob Keller Cc: Bruce Richardson , dpdk stable Subject: patch 'net/iavf: fix Rx timestamp validity check' has been queued to stable release 22.11.11 Date: Thu, 20 Nov 2025 12:44:38 +0000 Message-ID: <20251120124514.757933-6-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251120124514.757933-1-luca.boccassi@gmail.com> References: <20251112165308.1618107-49-luca.boccassi@gmail.com> <20251120124514.757933-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 22.11.11 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/22/25. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/2d320a4379ad166f34da03c7be02605d1ded1b72 Thanks. Luca Boccassi --- >From 2d320a4379ad166f34da03c7be02605d1ded1b72 Mon Sep 17 00:00:00 2001 From: Jacob Keller Date: Thu, 13 Nov 2025 13:33:45 -0800 Subject: [PATCH] net/iavf: fix Rx timestamp validity check [ upstream commit dba51a2fbdde67a2237a8d2c9fb73baf29e04dd0 ] When reporting an Rx timestamp from the receive descriptor, the iavf driver does not check the validity bit in the time_stamp_low field. In the event that hardware does not capture a receive timestamp for any reason, this valid bit is unset, and the timestamp value in the descriptor is zeroed out. The iavf driver ignores this and passes the zero value into the iavf_tstamp_convert_32b_64b function regardless, and proceeds to treat the result as a valid timestamp. Instead of reporting a zero timestamp which users can clearly interpret as invalid, the raw 0 value from the descriptor is "extended" to the 64-bit timestamp. This results in values which are not immediately obvious as invalid to users: timestamp 1760629088881475583 timestamp 1760629088881475583 timestamp 1760629088881475583 First, if the value is printed in base 10 it is not immediately obvious that the lower 32 bits are zero. Second, multiple packets in sequence will receive the same "timestamp". This occurs because of the timestamp extension logic. The receive descriptor timestamps are 40 bits, with 32 bits of nanosecond precision, 7 bits of subnanosecond precision, and 1 validity bit. The sub-nanosecond precision bits are discarded. To obtain a 64-bit timestamp, the upper 32 bits are calculated from the lower 32-bits and a snapshot of the PHC timer that is captured recently (within ~2 seconds of the packet timestamp). This enables reporting proper full 64-bit timestamps without needing to store all 64 bits in the receive descriptor. However, when timestamps are not working properly, the raw 'zero' value is extended regardless of whether hardware indicated it was a valid timestamp. As a result, users can see what appear at a glance as valid timestamps. However, they will not match the packet reception time, and will only update when the upper bits would roll over. This occurs every 2^32 seconds, or approximately once every 4 seconds. Instead of reporting bogus extended timestamp values which could confuse user applications, check the validity bit and only report a timestamp of the valid bit is set. This matches the implementation used in the Linux PF driver. Fixes: b5cd735132f6 ("net/iavf: enable Rx timestamp on flex descriptor") Signed-off-by: Jacob Keller Acked-by: Bruce Richardson --- drivers/net/iavf/iavf_rxtx.c | 9 ++++++--- drivers/net/iavf/iavf_rxtx.h | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c index 4418b620c4..acace63096 100644 --- a/drivers/net/iavf/iavf_rxtx.c +++ b/drivers/net/iavf/iavf_rxtx.c @@ -1553,7 +1553,8 @@ iavf_recv_pkts_flex_rxd(void *rx_queue, rxd_to_pkt_fields_ops[rxq->rxdid](rxq, rxm, &rxd); pkt_flags = iavf_flex_rxd_error_to_pkt_flags(rx_stat_err0); - if (iavf_timestamp_dynflag > 0) { + if (iavf_timestamp_dynflag > 0 && + rxd.wb.time_stamp_low & IAVF_RX_FLX_DESC_TS_VALID) { ts_ns = iavf_tstamp_convert_32b_64b(rxq->phc_time, rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high)); @@ -1722,7 +1723,8 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts, rxd_to_pkt_fields_ops[rxq->rxdid](rxq, first_seg, &rxd); pkt_flags = iavf_flex_rxd_error_to_pkt_flags(rx_stat_err0); - if (iavf_timestamp_dynflag > 0) { + if (iavf_timestamp_dynflag > 0 && + rxd.wb.time_stamp_low & IAVF_RX_FLX_DESC_TS_VALID) { ts_ns = iavf_tstamp_convert_32b_64b(rxq->phc_time, rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high)); @@ -2007,7 +2009,8 @@ iavf_rx_scan_hw_ring_flex_rxd(struct iavf_rx_queue *rxq, stat_err0 = rte_le_to_cpu_16(rxdp[j].wb.status_error0); pkt_flags = iavf_flex_rxd_error_to_pkt_flags(stat_err0); - if (iavf_timestamp_dynflag > 0) { + if (iavf_timestamp_dynflag > 0 && + rxdp[j].wb.time_stamp_low & IAVF_RX_FLX_DESC_TS_VALID) { ts_ns = iavf_tstamp_convert_32b_64b(rxq->phc_time, rte_le_to_cpu_32(rxdp[j].wb.flex_ts.ts_high)); diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h index b56519a507..bdfb7c295d 100644 --- a/drivers/net/iavf/iavf_rxtx.h +++ b/drivers/net/iavf/iavf_rxtx.h @@ -611,6 +611,9 @@ enum iavf_tx_ctx_desc_tunnel_l4_tunnel_type { /* for iavf_32b_rx_flex_desc.pkt_len member */ #define IAVF_RX_FLX_DESC_PKT_LEN_M (0x3FFF) /* 14-bits */ +/* Valid indicator bit for the time_stamp_low field */ +#define IAVF_RX_FLX_DESC_TS_VALID (0x1UL) + int iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, -- 2.47.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-20 12:44:13.012462859 +0000 +++ 0006-net-iavf-fix-Rx-timestamp-validity-check.patch 2025-11-20 12:44:12.778087984 +0000 @@ -1 +1 @@ -From dba51a2fbdde67a2237a8d2c9fb73baf29e04dd0 Mon Sep 17 00:00:00 2001 +From 2d320a4379ad166f34da03c7be02605d1ded1b72 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit dba51a2fbdde67a2237a8d2c9fb73baf29e04dd0 ] + @@ -52 +53,0 @@ -Cc: stable@dpdk.org @@ -57,2 +58,2 @@ - drivers/net/intel/iavf/iavf_rxtx.c | 9 ++++++--- - drivers/net/intel/iavf/iavf_rxtx.h | 3 +++ + drivers/net/iavf/iavf_rxtx.c | 9 ++++++--- + drivers/net/iavf/iavf_rxtx.h | 3 +++ @@ -61,5 +62,5 @@ -diff --git a/drivers/net/intel/iavf/iavf_rxtx.c b/drivers/net/intel/iavf/iavf_rxtx.c -index ea49059f83..d8662fd815 100644 ---- a/drivers/net/intel/iavf/iavf_rxtx.c -+++ b/drivers/net/intel/iavf/iavf_rxtx.c -@@ -1582,7 +1582,8 @@ iavf_recv_pkts_flex_rxd(void *rx_queue, +diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c +index 4418b620c4..acace63096 100644 +--- a/drivers/net/iavf/iavf_rxtx.c ++++ b/drivers/net/iavf/iavf_rxtx.c +@@ -1553,7 +1553,8 @@ iavf_recv_pkts_flex_rxd(void *rx_queue, @@ -75 +76 @@ -@@ -1751,7 +1752,8 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts, +@@ -1722,7 +1723,8 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts, @@ -85 +86 @@ -@@ -2036,7 +2038,8 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq, +@@ -2007,7 +2009,8 @@ iavf_rx_scan_hw_ring_flex_rxd(struct iavf_rx_queue *rxq, @@ -95,5 +96,5 @@ -diff --git a/drivers/net/intel/iavf/iavf_rxtx.h b/drivers/net/intel/iavf/iavf_rxtx.h -index 5c9339b99f..8efb3bd04e 100644 ---- a/drivers/net/intel/iavf/iavf_rxtx.h -+++ b/drivers/net/intel/iavf/iavf_rxtx.h -@@ -504,6 +504,9 @@ enum iavf_tx_ctx_desc_tunnel_l4_tunnel_type { +diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h +index b56519a507..bdfb7c295d 100644 +--- a/drivers/net/iavf/iavf_rxtx.h ++++ b/drivers/net/iavf/iavf_rxtx.h +@@ -611,6 +611,9 @@ enum iavf_tx_ctx_desc_tunnel_l4_tunnel_type {