From nobody Fri Dec 19 17:18:28 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 36C4C189F43 for ; Tue, 14 Oct 2025 00:47:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760402865; cv=none; b=rJ+qxe88BlgYvuWILHM8s0MOzYtUkp9a7XPz1LqWvdwENj1KNKSe0ZA115ak+O60ZAXT0NlR76cNkoXFmqqipcJWsmPlavrduGCBHPOkmJiFdkoHJRSY3YMIO3/mpis1U3BmAuQMYq1j0r9MGmdr4FQrmi6v1cxwKdpCuxDLpSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760402865; c=relaxed/simple; bh=4j/wr+NV+OGjyjc0tgLHhsWamrVErlfeEpEf5fc81rQ=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=FV3n1E3TUFpFvRfFDyIU8HKCREFDZlhK2g4LGnhFrPohgWH4xwh6nWgbzG8HOUAQ0jutNLSjdsjNlEASN/oHl/OEhR0a9aneQow69G4h+cIcQfo3rUboOZQ8ZMZgSoX8uXcYJMdEh5DIuoJTqsymjCZA76qrrS/EA9lZZUWBYVk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ub3/bYSR; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ub3/bYSR" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b60992e3b27so8157168a12.3 for ; Mon, 13 Oct 2025 17:47:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1760402863; x=1761007663; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=aSVYxs6AJZm83SaX9b/VllgChCtMo/ExnUJyejp3mZI=; b=ub3/bYSRcUvNCxfhF85wWSuaKCgHzCDd0kX2G0VoPKwW04y3uuUAD717djY44uwNBY zAfchIfbzTGtenEv16MhtWg6SAVXrVhvCdBIDDMX4EqLOOvy2oDLfCNAELLl19+u/FCL rkAKRJAopp74l/EG8NCCL/5YijxTfCjkN47owe6oeF7XGnY/iZ/cBhwv398/ivVDaYhw K3zc+k33L1/qjGkXBA4WIrLPkJNXV89Fry0xG6oYBwbCVBvcLHE1aWf0X0GIA0eYalQW 9surBszJBFG7tK7tXH3MJx/yGnLLaxeflPZKOBpR5BRapBLn5+jDlg49O7YsDsTUJElG vtNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760402863; x=1761007663; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=aSVYxs6AJZm83SaX9b/VllgChCtMo/ExnUJyejp3mZI=; b=pF9SNHEl8jW+CZONChT1EV4HI/EO1M28u5P2UiUXTMQSl/FJ986bfYbfgrktSG6avT IETNZbZkc7UTy+95x9dLrNgvGwKYIx0zhzfGgao7o2g8vj8ZijYyvKP+bdTcvFl1f/7f 2deCFoY3ayv2HZBp3FqLpSDwS+KOZ4uPOySS13rkpt02z1Jcn9OAl+hltZwGLT8pHJru 0WFv8nu2KJFe9vHSUp0LWVZyOqgpW7NXI5fLIUVdhqEpP9uK2cL+LubXZlVumnxCHje7 qUkDAfZTW2s47mvrszV4HZ6quOApqsxUbyEVEMG+Rv3kewg2YuWy4led2XxJ439Kqu8M cnJw== X-Forwarded-Encrypted: i=1; AJvYcCW/nYV+NGraC+AelgbwWaVq9dxiNje2VJGVbe2dldubkGT3H20sYI5G/SovYdNBeqA/WTcQMu3GktiIzBc=@vger.kernel.org X-Gm-Message-State: AOJu0YxvLm+duEdFbH+sLk5avRSRI5EqopvYzrG+WPaMZJ/jV4w76hbG 0ZIIU3Q5yZYPGq4cDbWjsQsAjU0gMpoQTmGIhelhsnZLAOKsmYT2oE67pPCFaYTonmT/7XwUDix cgl6ht50wVq9r65/qxgYkMQHCHg== X-Google-Smtp-Source: AGHT+IHBTD15jMQtH8/mEKSxIA6jN/9InByyjygOexw4uv4P27BlVue30aW7yBjsu+DPqjHAAiQvURuwJNBVdd8BMQ== X-Received: from plbiz23.prod.google.com ([2002:a17:902:ef97:b0:269:607f:f138]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:384d:b0:25b:f1f3:815f with SMTP id d9443c01a7336-290272ff7cfmr251025405ad.58.1760402863383; Mon, 13 Oct 2025 17:47:43 -0700 (PDT) Date: Tue, 14 Oct 2025 00:47:39 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.51.0.760.g7b8bcc2412-goog Message-ID: <20251014004740.2775957-1-hramamurthy@google.com> Subject: [PATCH net] gve: Check valid ts bit on RX descriptor before hw timestamping From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, willemb@google.com, pkaligineedi@google.com, jfraker@google.com, ziweixiao@google.com, thostet@google.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tim Hostetler The device returns a valid bit in the LSB of the low timestamp byte in the completion descriptor that the driver should check before setting the SKB's hardware timestamp. If the timestamp is not valid, do not hardware timestamp the SKB. Cc: stable@vger.kernel.org Fixes: b2c7aeb49056 ("gve: Implement ndo_hwtstamp_get/set for RX timestampi= ng") Reviewed-by: Joshua Washington Signed-off-by: Tim Hostetler Signed-off-by: Harshitha Ramamurthy Reviewed-by: Simon Horman Reviewed-by: Vadim Fedorenko Reviewed-by: Willem de Bruijn --- drivers/net/ethernet/google/gve/gve.h | 2 ++ drivers/net/ethernet/google/gve/gve_desc_dqo.h | 3 ++- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 18 ++++++++++++------ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index bceaf9b05cb4..4cc6dcbfd367 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -100,6 +100,8 @@ */ #define GVE_DQO_QPL_ONDEMAND_ALLOC_THRESHOLD 96 =20 +#define GVE_DQO_RX_HWTSTAMP_VALID 0x1 + /* Each slot in the desc ring has a 1:1 mapping to a slot in the data ring= */ struct gve_rx_desc_queue { struct gve_rx_desc *desc_ring; /* the descriptor ring */ diff --git a/drivers/net/ethernet/google/gve/gve_desc_dqo.h b/drivers/net/e= thernet/google/gve/gve_desc_dqo.h index d17da841b5a0..f7786b03c744 100644 --- a/drivers/net/ethernet/google/gve/gve_desc_dqo.h +++ b/drivers/net/ethernet/google/gve/gve_desc_dqo.h @@ -236,7 +236,8 @@ struct gve_rx_compl_desc_dqo { =20 u8 status_error1; =20 - __le16 reserved5; + u8 reserved5; + u8 ts_sub_nsecs_low; __le16 buf_id; /* Buffer ID which was sent on the buffer queue. */ =20 union { diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index 7380c2b7a2d8..02e25be8a50d 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -456,14 +456,20 @@ static void gve_rx_skb_hash(struct sk_buff *skb, * Note that this means if the time delta between packet reception and the= last * clock read is greater than ~2 seconds, this will provide invalid result= s. */ -static void gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32 hwts) +static void gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, + const struct gve_rx_compl_desc_dqo *desc) { u64 last_read =3D READ_ONCE(rx->gve->last_sync_nic_counter); struct sk_buff *skb =3D rx->ctx.skb_head; - u32 low =3D (u32)last_read; - s32 diff =3D hwts - low; - - skb_hwtstamps(skb)->hwtstamp =3D ns_to_ktime(last_read + diff); + u32 ts, low; + s32 diff; + + if (desc->ts_sub_nsecs_low & GVE_DQO_RX_HWTSTAMP_VALID) { + ts =3D le32_to_cpu(desc->ts); + low =3D (u32)last_read; + diff =3D ts - low; + skb_hwtstamps(skb)->hwtstamp =3D ns_to_ktime(last_read + diff); + } } =20 static void gve_rx_free_skb(struct napi_struct *napi, struct gve_rx_ring *= rx) @@ -919,7 +925,7 @@ static int gve_rx_complete_skb(struct gve_rx_ring *rx, = struct napi_struct *napi, gve_rx_skb_csum(rx->ctx.skb_head, desc, ptype); =20 if (rx->gve->ts_config.rx_filter =3D=3D HWTSTAMP_FILTER_ALL) - gve_rx_skb_hwtstamp(rx, le32_to_cpu(desc->ts)); + gve_rx_skb_hwtstamp(rx, desc); =20 /* RSC packets must set gso_size otherwise the TCP stack will complain * that packets are larger than MTU. --=20 2.51.0.740.g6adb054d12-goog