From nobody Sat Feb 7 17:48:53 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 1236B30146D for ; Fri, 14 Nov 2025 21:12:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154745; cv=none; b=XHLgIuZ+2SHtu9McD9DEAs4sVdEqhMIPqEbQLThXGCEQ9jahaHEuWyq5OqVcl41z1m6riJko5/UsjrxDQVd4+BEzIlMCGLud6q4C78iU4v8MAq0J2Ygjx1d9LcvhRv9PLWXnBzGqwybHczF+tXIG6YmcngzfDEKDgO6nRayGMhM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154745; c=relaxed/simple; bh=ByKZPuk2HGQW6OhN65KtLVsYzAqmXFSrQnJxwSyHvLI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZL+DXxL1+zVIDUCQSWMM5zH9Lf8KeFXvT3zlcT7ArlNoX0t9aO/4hYr/Bke4MSk2zvxGS4PAowao/Oe4WAH0X5PMkgeSNEElrae3abmNNFEIlqJnIGGCrKdY1J9yMhfqSHOvUW2yE9Hf89DpxRGCAlPsYuQXtrzKWvniAjyBmw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=hLMy7JoI; arc=none smtp.client-ip=209.85.216.73 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--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="hLMy7JoI" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-341cd35b0f3so4098667a91.0 for ; Fri, 14 Nov 2025 13:12:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763154743; x=1763759543; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=QKBHl2B0t2rsNVRLaKmcfcEl1iIRuO5Q1cRjHVhm6UQ=; b=hLMy7JoICx8hjCHoeyfhipxGfrq8dFXdrwbUYzuqzmbBmucoAvJt9sp8jOJhaFdy9f w24d3hticl5H3hjsgPf8zlWh0/KOFwY3c5hBbSzLTYGZJ8I+Prk3kywUL4pqzPQASGJn cJe0xEGpKT1+RXvARBAMzrnAv/RNmYIzyjdpNKr5zuL7i3yc/bCEZ58+4QvjfsjTK7Il SZSLdvEqemTJaHyIu1kpDlvswhzCrIdz8YTtOTElZgpJVqd/aysNiqCabuoE6iZKSOJ2 ws2oY9AWxwFFPV7PuHE8TTQfcqqWwSMki5GKdzWDrTtCzunNYn3Eg/Pp6ppRa5x+N+Wu jNvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763154743; x=1763759543; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QKBHl2B0t2rsNVRLaKmcfcEl1iIRuO5Q1cRjHVhm6UQ=; b=T0rqkdi18w4SFfCuKBW51bmB6MkYEs8gEfXLJScqO0YrNWnQ+3jmd8uBl9sYhVd8ZZ twqB5i2HYlFM1LAq+HFd2r35LrXeXAl0HCm+p4wTdLiADAD+r9zEv+5RYMln3pSzNhvG 6ukamloEVdwC9Xzps32VYhbhC0XzSzr9Nrg3B3tS+Ybbfo46POdkx/0UgavQ7nr21Dbc ltkO3MmE9jCwv5C7P1Rq8Yspx82xvwQxKVe+UdOF4BffSk6WwkZryQopWxtVnYIDNjOk feVkpmgDCQ1o1lMOEORpRM9I1uhFR4V66uoxj/FS7Em96xQf5V+uvI0KVFi71o59dzi1 HGfg== X-Forwarded-Encrypted: i=1; AJvYcCVn6WuNwcStPCnr2AItKYPHkCV1Yv1F3b9nXALnzDl03OysJxw2iX9xjYq10Ijdajx/4RYqWP27OcHBSu8=@vger.kernel.org X-Gm-Message-State: AOJu0YxNk/nNQjtbjtI09nlxfouqGUqOdnYLUmRmDJLmEtxeFKuOe1Cg Rj/f/2dCOw+/32qSdEgqKo8KG1cCcwrVCGLTUZOuO3A5eeqe9/DG9MXLRIw8XOHrWUIHuls0Wjz 9XeBUWZBCwxbTyA== X-Google-Smtp-Source: AGHT+IGWVBv3Pww1t7WePIYslvvfU7cKUspRKFbH+20W0IFFp4fY2S5t4bjF/WQt153NaTPY5mB4phKvdG0f9g== X-Received: from pjbms13.prod.google.com ([2002:a17:90b:234d:b0:341:adc3:c051]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1811:b0:341:1a50:2ea9 with SMTP id 98e67ed59e1d1-343eacbf2e9mr9594441a91.16.1763154743307; Fri, 14 Nov 2025 13:12:23 -0800 (PST) Date: Fri, 14 Nov 2025 13:11:43 -0800 In-Reply-To: <20251114211146.292068-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251114211146.292068-1-joshwash@google.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog Message-ID: <20251114211146.292068-2-joshwash@google.com> Subject: [PATCH net-next 1/4] gve: Move ptp_schedule_worker to gve_init_clock From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Tim Hostetler , Kevin Yang , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tim Hostetler Previously, gve had been only initializing ptp aux work when hardware timestamping was initialized through ndo_hwtsatmp_set. As this patch series introduces XDP hardware timestamp metadata which will require the ptp aux work, the work can't be gated on the kernel_hwtstamp_config being set and must be initialized elsewhere. For simplicity, ptp_schedule_worker is invoked right after the ptp_clock is registered with the kernel (which happens during gve_probe or following reset). The worker is scheduled in GVE_NIC_TS_SYNC_INTERVAL_MS as the synchronous call to gve_clock_nic_ts_read makes the worker redundant if scheduled immediately. If gve cannot read the device clock immediately, it errors out of gve_init_clock. Signed-off-by: Tim Hostetler Reviewed-by: Willem de Bruijn Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_main.c | 4 ---- drivers/net/ethernet/google/gve/gve_ptp.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 6fb8fbb38a7d..2b41a42fb516 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2188,10 +2188,6 @@ static int gve_set_ts_config(struct net_device *dev, } =20 kernel_config->rx_filter =3D HWTSTAMP_FILTER_ALL; - gve_clock_nic_ts_read(priv); - ptp_schedule_worker(priv->ptp->clock, 0); - } else { - ptp_cancel_worker_sync(priv->ptp->clock); } =20 priv->ts_config.rx_filter =3D kernel_config->rx_filter; diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethern= et/google/gve/gve_ptp.c index a384a9ed4914..073677d82ee8 100644 --- a/drivers/net/ethernet/google/gve/gve_ptp.c +++ b/drivers/net/ethernet/google/gve/gve_ptp.c @@ -133,9 +133,21 @@ int gve_init_clock(struct gve_priv *priv) err =3D -ENOMEM; goto release_ptp; } + err =3D gve_clock_nic_ts_read(priv); + if (err) { + dev_err(&priv->pdev->dev, "failed to read NIC clock %d\n", err); + goto release_nic_ts_report; + } + ptp_schedule_worker(priv->ptp->clock, + msecs_to_jiffies(GVE_NIC_TS_SYNC_INTERVAL_MS)); =20 return 0; =20 +release_nic_ts_report: + dma_free_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + priv->nic_ts_report, priv->nic_ts_report_bus); + priv->nic_ts_report =3D NULL; release_ptp: gve_ptp_release(priv); return err; --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Sat Feb 7 17:48:53 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 2C0CD347FD7 for ; Fri, 14 Nov 2025 21:12:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154747; cv=none; b=W0l+l4Bkk+lX6fjD8uxuU/Ic2dR9eTyEDBeygrHXFkn/HHpJRLd8ILj8Q0Mx58sr0KiwyNIgf1wFeD0l5TwVRF96IkMlVfdjaoZ5NdUXadpFMF/Dv+2NJTNSntFbaimYyZa9+ZSBYvUXR0il9mOQP4ypRA86ZCYOCM6HR9cnMvA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154747; c=relaxed/simple; bh=T6+d668CY7Ck7eZvXYmqIoDhdMFjjZNlShKvRnyo6yo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XXNR0/+wknDrRpF5El0dNHZKHe0GaxBWzaZYdlf3AGu0toyFghyl4nRiXbyqwfe0v9uQ+QF+Ht2py4Xmktdc9GoY4T/HWZ/t9KhHnQ1sjDzP5t0bJumsygKxCh4KBsMMC+8O9Bjnfu6R/b33RpGiVxuJdeCT/evpG2Ayzp74DoM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=TS/F4Vcp; arc=none smtp.client-ip=209.85.210.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--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TS/F4Vcp" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7a998ab7f87so3988051b3a.3 for ; Fri, 14 Nov 2025 13:12:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763154745; x=1763759545; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=pmEQOsW5fdEOM8rVgZL0f19iMNBD1EWCqYTBFjDAENI=; b=TS/F4VcpBpz/a1IwruQkobF8bHMNHN3xMyG1bp23AaBj8yEhnvw4uKyCRMr6cB1oNM jz7Fuxi1QGH9ASHszpZONDRd62MpmrqUYhaeWf3aWaf4sIhIukcVUecwNKv3zZ+TxvYv 2lUXddRzw4WqKfzW/NQa99AvP8xnsoJVYVEPfgmurtMPDmRkZT40rtgU7Tp4SQa23Nq4 ltfVTLuqDbDHmkqqUxTY61kiSeL6icu9usCnx4d7SeIE7TsHfvqhRYOCNgTk+oLHsd/S kd2WahI8yygF8eqEFxBFXVreqtRhsscmA1AkPtZfe/1KP6m0G8I/5Ruf2c4TMXrBTn6z 7nQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763154745; x=1763759545; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pmEQOsW5fdEOM8rVgZL0f19iMNBD1EWCqYTBFjDAENI=; b=jVYtqEcUPAZ+fjdEm97HwtiPJHAqDdSShDQyzdkSxlRK6YODtFhZwSCMVMGmXXsBEf F4XLcrE/YMmHcGutqYZ5jp2dS5TstdI50u8LnE1fEd4euoaPmQ2VDbA5REOZgTOdoQgH 4usVgArAuU0/9HUl2iHDUyCL8h+U6gAJ9ds8zJ8OdA/gSudViwuQR6sYJOSMaJCzn0Ot tBe0+uxinI9v2T5ddtdKrmL4ks6AvLAIWACX76jDGwi3Wi6sO9vexwkxFMyehVTMZdfM rVja2mSTdiEF8Xtm9vLrpV4VLbE0D4qItLiqSEtWIrUu5YKxXnE0EKT+hzaVB3FnoTxa VClg== X-Forwarded-Encrypted: i=1; AJvYcCWSCtJL7yq6LNNMQtj/VoBl3fUS4K29q5/3jgUEMMNWi5rj7Ka8qKqrqyJxef5neknch0N0q/LFVah9XUE=@vger.kernel.org X-Gm-Message-State: AOJu0YzQsE09Kh0MIMG+kLiDgdhPgjclUOh/d+OYc0p9vjMKy1EMvVEL qD95GHoAE+fbHdohtONeVnhLIkeOoZHkn2S3bTJG6gsEtn06sc5i24WeneGpur0ovSLLajK3A75 Kkial/Lj1YwYssw== X-Google-Smtp-Source: AGHT+IFZzfB2L/hPLfcxvKwlFateyylLJARdQKfDv09tdbnT7hsReWajdQtkS8JbmkPJUWMTInKqnF2TjKYjTQ== X-Received: from pgag19.prod.google.com ([2002:a05:6a02:2f13:b0:bc7:bb77:3836]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7484:b0:34f:28f7:ed79 with SMTP id adf61e73a8af0-35b9fd7be60mr5841238637.19.1763154744982; Fri, 14 Nov 2025 13:12:24 -0800 (PST) Date: Fri, 14 Nov 2025 13:11:44 -0800 In-Reply-To: <20251114211146.292068-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251114211146.292068-1-joshwash@google.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog Message-ID: <20251114211146.292068-3-joshwash@google.com> Subject: [PATCH net-next 2/4] gve: Wrap struct xdp_buff From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Tim Hostetler , Kevin Yang , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tim Hostetler RX timestamping will need to keep track of extra temporary information per-packet. In preparation for this, introduce gve_xdp_buff to wrap the xdp_buff. This is similar in function to stmmac_xdp_buff and ice_xdp_buff. Signed-off-by: Tim Hostetler Reviewed-by: Willem de Bruijn Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve.h | 5 +++++ drivers/net/ethernet/google/gve/gve_rx_dqo.c | 16 ++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index a33b44c1eb86..a21e599cf710 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -205,6 +205,11 @@ struct gve_rx_buf_state_dqo { s16 next; }; =20 +/* Wrapper for XDP Rx metadata */ +struct gve_xdp_buff { + struct xdp_buff xdp; +}; + /* `head` and `tail` are indices into an array, or -1 if empty. */ struct gve_index_list { s16 head; diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index 1aff3bbb8cfc..76b26896f572 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -840,23 +840,23 @@ static int gve_rx_dqo(struct napi_struct *napi, struc= t gve_rx_ring *rx, } =20 if (xprog) { - struct xdp_buff xdp; + struct gve_xdp_buff gve_xdp; void *old_data; int xdp_act; =20 - xdp_init_buff(&xdp, buf_state->page_info.buf_size, + xdp_init_buff(&gve_xdp.xdp, buf_state->page_info.buf_size, &rx->xdp_rxq); - xdp_prepare_buff(&xdp, + xdp_prepare_buff(&gve_xdp.xdp, buf_state->page_info.page_address + buf_state->page_info.page_offset, buf_state->page_info.pad, buf_len, false); - old_data =3D xdp.data; - xdp_act =3D bpf_prog_run_xdp(xprog, &xdp); - buf_state->page_info.pad +=3D xdp.data - old_data; - buf_len =3D xdp.data_end - xdp.data; + old_data =3D gve_xdp.xdp.data; + xdp_act =3D bpf_prog_run_xdp(xprog, &gve_xdp.xdp); + buf_state->page_info.pad +=3D gve_xdp.xdp.data - old_data; + buf_len =3D gve_xdp.xdp.data_end - gve_xdp.xdp.data; if (xdp_act !=3D XDP_PASS) { - gve_xdp_done_dqo(priv, rx, &xdp, xprog, xdp_act, + gve_xdp_done_dqo(priv, rx, &gve_xdp.xdp, xprog, xdp_act, buf_state); return 0; } --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Sat Feb 7 17:48:53 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 7048334AB1D for ; Fri, 14 Nov 2025 21:12:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154750; cv=none; b=UDXpM6j/FnKkHJElk4O9WkmmzewpBGT/aME6kp46T2KfaM7x9N2nyLcM5nhv541tHtIWwBhcMA4Enrg8isMZNV361lFsDYGo+PFkEPD5LjAvIknB9tefqf0QvJjB34RxDRa+5aGvFtxE5WF+6cwWTDr0c9d6/5RlwjVp7keJqII= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154750; c=relaxed/simple; bh=zVyF4eCmetz8qkPkTMcTx44ahznevhy/p0XTEImdKRw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=K+NDhAyQQdyEn0UPkqg/M0kUyVdHwVoLzJK2hkfIBXeYhVRW2ncZVgiotNPwmQlEgVwkElFkVO8DgVHIKy3Jd62xsWKXe2ekf1amEk7tR8+/Sr97wUa2LfNO1XwPgN3FdY820AFZJhFVVC3QbcDJ4aNZTwXKZoeALfnVKA2xDso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=nn8j/TDv; arc=none smtp.client-ip=209.85.216.74 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--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nn8j/TDv" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-340c261fb38so4898159a91.0 for ; Fri, 14 Nov 2025 13:12:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763154747; x=1763759547; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=7Y/piwZstoQ4BnBjUX1Vciq6F5LLISS027ouNsEaB94=; b=nn8j/TDvGb/931H6AnnnuA/eLPLzpytrDyBKJuQH1sUT48X5oXeQHLqS9lb1TRh7N3 Aw5KplDLpTtBxy3sFGymgxgniuJ5tHILA5XuZEvoMG9i8x+XG9a6gCfbrJinBt87wE89 d2rmFDlMIg5t9nmAqF+LY+CdOUSZhSsblt+sqon9GMnKK/NCal1HAAuQdingMFBP5uFm PK67i+QreuP1kU671zugAX3LeqVuIeVPueXh7qCWy7JuhdS6xyytoGYO3YceMCFHWRoi X5gcVhMbCd4rMUviKen+mRkUjrdk0NSGHBFYSiwUKkWVR0UPdwCgBukLc3mdxPMpl33E Yv0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763154747; x=1763759547; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7Y/piwZstoQ4BnBjUX1Vciq6F5LLISS027ouNsEaB94=; b=Q3M1DvC/QxrmwciySM8iYUxzLgC69At7TQ2g+M089lI0K8oqjGrecfg+EKobvK5jB0 Ny4cMdlCoIANWPxyxGlYSeb0M2W0JdIePK4heBM+JnnxgAQuvbW6rXdU5OC/BADz0aLi 8x7gs1pCpxFggU3Sq/ZuUNcEpgclyeyMnKZZwcJmjJkNxWHavlNuF0xTPPzrL3FyXUX+ lfDIjvrLmGByoMTySmgczuoMz3lEpyKQGEv4YiOsv1Nvldg2nhH7cSCz3uNRE1aJM97Q zyu8yq1QxekzeKMvV8UyTqCf+q+5SbljfoH1Fu/NK/c+vKK0xbckFbaUes/lOokxeF2G chyQ== X-Forwarded-Encrypted: i=1; AJvYcCUujrWzcKHVqEuIi4HmqjN2RMlCfh9ISXWNbYW+B4uxqFty/+LA9IEVv+yE5+wopg182fWyXGIONnwZYeY=@vger.kernel.org X-Gm-Message-State: AOJu0YwlB0rzuVb1LgnFLMt9Uym8ryF4uAP6VptTUCdi7l9hteXY2Kk8 g7GkObpJ262WvzwRmH+8dK26h8tNyS0M/q9bU39aBhq4ujjqwOY9msBv0zfx10TFXKzaD0Sxor0 UDQOJUHUpJtMXZw== X-Google-Smtp-Source: AGHT+IGZU0N5DqgSQDGu2t1JpZWqiC9MfzdAhqENlzoLqYOPfSiO6nWEDpRKF/5fje3psrOGSncU1GiPoXN8ag== X-Received: from pjblp4.prod.google.com ([2002:a17:90b:4a84:b0:340:bb32:f5cf]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:17cc:b0:340:cb39:74cd with SMTP id 98e67ed59e1d1-343fa74d17amr4615610a91.32.1763154746769; Fri, 14 Nov 2025 13:12:26 -0800 (PST) Date: Fri, 14 Nov 2025 13:11:45 -0800 In-Reply-To: <20251114211146.292068-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251114211146.292068-1-joshwash@google.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog Message-ID: <20251114211146.292068-4-joshwash@google.com> Subject: [PATCH net-next 3/4] gve: Prepare bpf_xdp_metadata_rx_timestamp support From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Tim Hostetler , Kevin Yang , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tim Hostetler Support populating XDP RX metadata with hardware RX timestamps. This patch utilizes the same underlying logic to calculate hardware timestamps as the regular RX path. xdp_metadata_ops is registered with the net_device in a future patch. gve_rx_calculate_hwtstamp was pulled out so as to not duplicate logic between gve_xdp_rx_timestamp and gve_rx_hwtstamp. Signed-off-by: Tim Hostetler Reviewed-by: Willem de Bruijn Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve.h | 2 + drivers/net/ethernet/google/gve/gve_dqo.h | 1 + drivers/net/ethernet/google/gve/gve_rx_dqo.c | 41 +++++++++++++++----- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index a21e599cf710..970d5ca8cdde 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -208,6 +208,8 @@ struct gve_rx_buf_state_dqo { /* Wrapper for XDP Rx metadata */ struct gve_xdp_buff { struct xdp_buff xdp; + struct gve_priv *gve; + const struct gve_rx_compl_desc_dqo *compl_desc; }; =20 /* `head` and `tail` are indices into an array, or -1 if empty. */ diff --git a/drivers/net/ethernet/google/gve/gve_dqo.h b/drivers/net/ethern= et/google/gve/gve_dqo.h index 6eb442096e02..5871f773f0c7 100644 --- a/drivers/net/ethernet/google/gve/gve_dqo.h +++ b/drivers/net/ethernet/google/gve/gve_dqo.h @@ -36,6 +36,7 @@ netdev_tx_t gve_tx_dqo(struct sk_buff *skb, struct net_de= vice *dev); netdev_features_t gve_features_check_dqo(struct sk_buff *skb, struct net_device *dev, netdev_features_t features); +int gve_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp); bool gve_tx_poll_dqo(struct gve_notify_block *block, bool do_clean); bool gve_xdp_poll_dqo(struct gve_notify_block *block); bool gve_xsk_tx_poll_dqo(struct gve_notify_block *block, int budget); diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index 76b26896f572..f20d1b1d06e6 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -456,20 +456,38 @@ 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 ktime_t gve_rx_get_hwtstamp(struct gve_priv *gve, u32 hwts) +{ + u64 last_read =3D READ_ONCE(gve->last_sync_nic_counter); + u32 low =3D (u32)last_read; + s32 diff =3D hwts - low; + + return ns_to_ktime(last_read + diff); +} + 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 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); - } + + if (desc->ts_sub_nsecs_low & GVE_DQO_RX_HWTSTAMP_VALID) + skb_hwtstamps(skb)->hwtstamp =3D + gve_rx_get_hwtstamp(rx->gve, le32_to_cpu(desc->ts)); +} + +int gve_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp) +{ + const struct gve_xdp_buff *ctx =3D (void *)_ctx; + + if (!ctx->gve->nic_ts_report) + return -ENODATA; + + if (!(ctx->compl_desc->ts_sub_nsecs_low & GVE_DQO_RX_HWTSTAMP_VALID)) + return -ENODATA; + + *timestamp =3D gve_rx_get_hwtstamp(ctx->gve, + le32_to_cpu(ctx->compl_desc->ts)); + return 0; } =20 static void gve_rx_free_skb(struct napi_struct *napi, struct gve_rx_ring *= rx) @@ -851,6 +869,9 @@ static int gve_rx_dqo(struct napi_struct *napi, struct = gve_rx_ring *rx, buf_state->page_info.page_offset, buf_state->page_info.pad, buf_len, false); + gve_xdp.gve =3D priv; + gve_xdp.compl_desc =3D compl_desc; + old_data =3D gve_xdp.xdp.data; xdp_act =3D bpf_prog_run_xdp(xprog, &gve_xdp.xdp); buf_state->page_info.pad +=3D gve_xdp.xdp.data - old_data; --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Sat Feb 7 17:48:53 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 792A034CFB5 for ; Fri, 14 Nov 2025 21:12:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154751; cv=none; b=JbWaDlKH1XDheLMjSogm/tu9ID+Ou9y+ejjeJN60aOHuJizSkxArwBMG9564t47Z3HOC12ngWbLDLgIzCcvOeEOByUZBQXW8qWe7kgw14YKk+j152GgG/iy67v/lViLmPw3IEd6+L/DOooET3vlNIQO1H4ecHz9SDkrGMqLngYQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763154751; c=relaxed/simple; bh=7GRJ/PW+ZjlS5rbC6oxTHSZTvFvMwaOAeCHQcMlMJBM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hXHAMGBZd0pmXbFVAfocGEpLcz/zcPM3sWWen+PA8Nfmxf/XJb6n5QeeFx6xDABGjguvYR9UfE57sT4fdO0aRBAGikoKAvbN3tvMwQy3AzbEEjMrD341BlH0TUA/WFUpQnOrWwJTkPZrxHP76ll91n4wazOPsPNzAiLEhuIIT/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XpOAjiZU; arc=none smtp.client-ip=209.85.214.201 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--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XpOAjiZU" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297f3710070so7163265ad.2 for ; Fri, 14 Nov 2025 13:12:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763154749; x=1763759549; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=fOJK9SLutt+EQ44/gH840hpx3Hfd04ffDRZ9ZBYAKSk=; b=XpOAjiZUWDC1ddcQzvuMJVUh+hQURnMXSQIlBL+XTJlRIaP/wL+2LxQ7uA8OSNCpPb r+owBvGITtTP1+ROtMdrGyvsMaK6e79vgjJuOGvB62FobpJ8UMLTv09ofgsqficPObgX 3ZA9wAvZ63NDwVKcvrdgFQw7TF0uXIZ7Fim6FXrqL4ptDsP4JGXWc+3Xd3xjKDQDdNMy 7CKmYAQEF0yBggaFvgwSXryg2eBQZ9trMIww17biBkGU934ltfl4i+IEgW/iRPOvCFD/ O30LgeRpDh6Tu7csgTYSRsDa8+VBuKt0yRhtdFmEP1I5mgRz00khuXWkCZjZVLsupnEq sAIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763154749; x=1763759549; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fOJK9SLutt+EQ44/gH840hpx3Hfd04ffDRZ9ZBYAKSk=; b=KlWUoqZMDQzMCw6HfX4RDZ4dEq6kmcqxt2COTk0lzViOxtNyUpksygq52j+6OICSDv gempT/h+DJqNbXHWxqsJtiyMhzStcOB2e3npdgo3qy5w6FZrJJtmZZCgg9rkpekndOPy bnI9BmykFgVNBvA4S6RH+NgcU+g02x6UXGSTo0GZ4Ih3fNnbkH5Nm0lt7d1E3lAzcWus arp2Zcs8GqXqkXNKcibXUe12DOPE1hz7f14UspLHni0Oume5yiQ9YcMlgyYmBZb2uRRd C3JoKKeSlCMnc9AWce5AsUmYR5FYCqWy9pKVEKD+9DlyA9TphXbcItOOCZO9QmGgc9/B Rapg== X-Forwarded-Encrypted: i=1; AJvYcCVn6xOJ5VUGU33epRJv7F4oYP3m+XuM6hpWnt9hzgjnOnzxMjBZgQoGQ/sexC3TSbo0UJFlvagzCH0fgYU=@vger.kernel.org X-Gm-Message-State: AOJu0YyzCIBEuVy4xSrqnXELehDbsETHy8kzbMsIG5VRkNDuZFfc++Rv 7hleUWTPUEsXe33Ri4ky5msWT6quUpnYD0w2e7VzFrPeKTgyv1JwNxJaqg9wDtEwYWUisfMJUUx KHSNutRMxuLn6+g== X-Google-Smtp-Source: AGHT+IFf3b5Wf2YCfgkcxyT3Kw1rGGftpj95wXeEiTy69JDVmj4KrlWGzwkN/sJtEE5hwtMzu+MXWWjiREPT0A== X-Received: from plhz15.prod.google.com ([2002:a17:902:d9cf:b0:298:3e35:3e78]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ef06:b0:298:595d:3d3a with SMTP id d9443c01a7336-2986a7566edmr43023395ad.50.1763154748557; Fri, 14 Nov 2025 13:12:28 -0800 (PST) Date: Fri, 14 Nov 2025 13:11:46 -0800 In-Reply-To: <20251114211146.292068-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251114211146.292068-1-joshwash@google.com> X-Mailer: git-send-email 2.52.0.rc1.455.g30608eb744-goog Message-ID: <20251114211146.292068-5-joshwash@google.com> Subject: [PATCH net-next 4/4] gve: Add Rx HWTS metadata to AF_XDP ZC mode From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Tim Hostetler , Kevin Yang , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tim Hostetler By overlaying the struct gve_xdp_buff on top of the struct xdp_buff_xsk that AF_XDP utilizes, the driver records the 32 bit timestamp via the completion descriptor and the cached 64 bit NIC timestamp via gve_priv. The driver's implementation of xmo_rx_timestamp extends the timestamp to the full and up to date 64 bit timestamp and returns it to the user. gve_rx_xsk_dqo is modified to accept a pointer to the completion descriptor and no longer takes a buf_len explicitly as it can be pulled out of the descriptor. With this patch gve now supports bpf_xdp_metadata_rx_timestamp. Signed-off-by: Tim Hostetler Reviewed-by: Willem de Bruijn Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_main.c | 7 +++++++ drivers/net/ethernet/google/gve/gve_rx_dqo.c | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 2b41a42fb516..a5a2b18d309b 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2348,6 +2348,10 @@ static void gve_set_netdev_xdp_features(struct gve_p= riv *priv) xdp_set_features_flag_locked(priv->dev, xdp_features); } =20 +static const struct xdp_metadata_ops gve_xdp_metadata_ops =3D { + .xmo_rx_timestamp =3D gve_xdp_rx_timestamp, +}; + static int gve_init_priv(struct gve_priv *priv, bool skip_describe_device) { int num_ntfy; @@ -2443,6 +2447,9 @@ static int gve_init_priv(struct gve_priv *priv, bool = skip_describe_device) } =20 gve_set_netdev_xdp_features(priv); + if (!gve_is_gqi(priv)) + priv->dev->xdp_metadata_ops =3D &gve_xdp_metadata_ops; + err =3D gve_setup_device_resources(priv); if (err) goto err_free_xsk_bitmap; diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index f20d1b1d06e6..f1bd8f5d5732 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -240,6 +240,11 @@ int gve_rx_alloc_ring_dqo(struct gve_priv *priv, rx->rx_headroom =3D 0; } =20 + /* struct gve_xdp_buff is overlaid on struct xdp_buff_xsk and utilizes + * the 24 byte field cb to store gve specific data. + */ + XSK_CHECK_PRIV_TYPE(struct gve_xdp_buff); + rx->dqo.num_buf_states =3D cfg->raw_addressing ? buffer_queue_slots : gve_get_rx_pages_per_qpl_dqo(cfg->ring_size); rx->dqo.buf_states =3D kvcalloc_node(rx->dqo.num_buf_states, @@ -701,16 +706,23 @@ static void gve_xdp_done_dqo(struct gve_priv *priv, s= truct gve_rx_ring *rx, } =20 static int gve_rx_xsk_dqo(struct napi_struct *napi, struct gve_rx_ring *rx, - struct gve_rx_buf_state_dqo *buf_state, int buf_len, + const struct gve_rx_compl_desc_dqo *compl_desc, + struct gve_rx_buf_state_dqo *buf_state, struct bpf_prog *xprog) { struct xdp_buff *xdp =3D buf_state->xsk_buff; + int buf_len =3D compl_desc->packet_len; struct gve_priv *priv =3D rx->gve; + struct gve_xdp_buff *gve_xdp; int xdp_act; =20 xdp->data_end =3D xdp->data + buf_len; xsk_buff_dma_sync_for_cpu(xdp); =20 + gve_xdp =3D (void *)xdp; + gve_xdp->gve =3D priv; + gve_xdp->compl_desc =3D compl_desc; + if (xprog) { xdp_act =3D bpf_prog_run_xdp(xprog, xdp); buf_len =3D xdp->data_end - xdp->data; @@ -800,7 +812,7 @@ static int gve_rx_dqo(struct napi_struct *napi, struct = gve_rx_ring *rx, =20 xprog =3D READ_ONCE(priv->xdp_prog); if (buf_state->xsk_buff) - return gve_rx_xsk_dqo(napi, rx, buf_state, buf_len, xprog); + return gve_rx_xsk_dqo(napi, rx, compl_desc, buf_state, xprog); =20 /* Page might have not been used for awhile and was likely last written * by a different thread. --=20 2.51.2.1041.gc1ab5b90ca-goog