From nobody Fri Dec 19 20:17:14 2025 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 0B94D288C21 for ; Thu, 22 May 2025 23:57:42 +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=1747958264; cv=none; b=rAaYDOOMB9RfKIHafgOay72gijnnXZPNZwpZbCMyOVmEfsLu3sSiqVThF6lByvnXPLab9SUAn+uioR6qmwqAZ35WpjoUMrixIcoOKuRh8Vj+9wJszo1mHS7Ll1Dmv49YwPO47Wp+wtohNRypFWBuZCScMh4/I+z8cTNFFUYtJnw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958264; c=relaxed/simple; bh=VvSe3oZkCTrXqGgrSEWCskBQ1CutMi4Wwcy6Jwf3/VM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Rp6uC4WV+T8bVKjjr6yRc4wi702aMMyQraEX3zjvTx3D2crU4dhZbQBhbW7+TJQjpzXQ6kYN8IY+fi//wPJu1SPrcnCo8ZrYL83XLFDdlj6aO8Pk62pNZ81vUaiN34FABvJu0LpYdbYDtverKzRUsrXxcIkw0gvOkcRXsa1IbGI= 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=xUpGgWhd; 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--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="xUpGgWhd" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-740adfc7babso7145339b3a.0 for ; Thu, 22 May 2025 16:57:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958262; x=1748563062; 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=Rdc0Nn59D98Yn70bYr/mCjhLlbBJUI2N5zWeAoQlNPQ=; b=xUpGgWhdygp7P+4tjl/nSmoSudbl9AbAODE/kEiLx5dwx2VGKRSf+m1k6IccFSCHmO kexvs/s9mq+ceLQ71/CQea2a8vkiXeED+zHy/AmRO95Cl9QEyUOgxvhlxoXOA5INga8c OTXMYgVfzVMTgFXkQiJjmtCOFTYAcqdX1KZpvTsTvpvce77G2Pn+bclgrIHQ4pTWtNHI ASMFK4p02Vq5qeiQmNHIZJcQvDlw5JSRQ8nchICFhNsgBhVC8V2n1oY1Vr18eSzQ9ESt HHaL7lPgQfDPq/ZKULFOv/edw9gwzCJrwCimYBmHR0ggWv1YCpTcvWAUvzpetZG+PYEG D8bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958262; x=1748563062; 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=Rdc0Nn59D98Yn70bYr/mCjhLlbBJUI2N5zWeAoQlNPQ=; b=S2rb57YwWio9Vvf6SsKxVMqdmRSkFDebB4Kjnsp6SNTG5kVc+1hCUwdSiHe0Dc8pEj n9jNBvUbZeFO5MsdTO/WkyZ8VxhOGL29Z1U2rjEQjvOkpFtQ4NTot9oQUUjuLruzxxJl psZm9wNjvUx3laJJ7K+FWW03po3bDItqPLz46pPc/JawoACes68sirJpqlJpIYrfOBzI cindqSanZQ9u6mQ3Oqm1GfgHRUUOaP8i9N4skVXbQuGK6pNiSHkMgccnBaCDvfx+8F8b OcgzbEdz2i+dZqEt/pNHygiRDz6V49VHBIWmmNYCnsX2F03utu1J6NHKNBAougTE6f5l tDOg== X-Forwarded-Encrypted: i=1; AJvYcCWDLKCFUvJYwlvTdSZBXHBz3ZW4PgeOVI4m5VCtDCEsOU6bJbniDpPfCvQijsuBheCGGYvcAN+tbzzO8wc=@vger.kernel.org X-Gm-Message-State: AOJu0YwyV7mdtdV8cSG4f+kMpWyUbGZk02011IKVTShRzdsQeAbQEyRs NF8MKYIXFrzdHXZqEAAFZPzqXuZvt9Pxi+IcXwdxiE2ECM9+AjlMsz1pYu8HsMrBaV01E5s9xdL X7MfJ03mvqIz10rQpQoLudTr0Ow== X-Google-Smtp-Source: AGHT+IFRvRHBk28FNYd3BVonDgdhCutfDUgwsyOjl468lqbL79VcfPJAYg7cOTBywBt6Ptm+cEY3flasmjnaEV9ieg== X-Received: from pfbic8.prod.google.com ([2002:a05:6a00:8a08:b0:736:86e0:8dee]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:130e:b0:742:a77b:8c4 with SMTP id d2e1a72fcca58-745ed847e76mr1367290b3a.3.1747958262219; Thu, 22 May 2025 16:57:42 -0700 (PDT) Date: Thu, 22 May 2025 23:57:30 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-2-hramamurthy@google.com> Subject: [PATCH net-next v3 1/8] gve: Add device option for nic clock synchronization From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org, Jeff Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Add the device option and negotiation with the device for clock synchronization with the nic. This option is necessary before the driver will advertise support for hardware timestamping or other related features. Signed-off-by: Jeff Rogers Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 3 ++ drivers/net/ethernet/google/gve/gve_adminq.c | 31 +++++++++++++++++++- drivers/net/ethernet/google/gve/gve_adminq.h | 9 ++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 2fab38c8ee78..e9b2c1394b1f 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -870,6 +870,9 @@ struct gve_priv { u16 rss_lut_size; bool cache_rss_config; struct gve_rss_config rss_config; + + /* True if the device supports reading the nic clock */ + bool nic_timestamp_supported; }; =20 enum gve_service_task_flags_bit { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index 3e8fc33cc11f..ae20d2f7e6e1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -46,6 +46,7 @@ void gve_parse_device_option(struct gve_priv *priv, struct gve_device_option_buffer_sizes **dev_op_buffer_sizes, struct gve_device_option_flow_steering **dev_op_flow_steering, struct gve_device_option_rss_config **dev_op_rss_config, + struct gve_device_option_nic_timestamp **dev_op_nic_timestamp, struct gve_device_option_modify_ring **dev_op_modify_ring) { u32 req_feat_mask =3D be32_to_cpu(option->required_features_mask); @@ -225,6 +226,23 @@ void gve_parse_device_option(struct gve_priv *priv, "RSS config"); *dev_op_rss_config =3D (void *)(option + 1); break; + case GVE_DEV_OPT_ID_NIC_TIMESTAMP: + if (option_length < sizeof(**dev_op_nic_timestamp) || + req_feat_mask !=3D GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP) { + dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT, + "Nic Timestamp", + (int)sizeof(**dev_op_nic_timestamp), + GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP, + option_length, req_feat_mask); + break; + } + + if (option_length > sizeof(**dev_op_nic_timestamp)) + dev_warn(&priv->pdev->dev, + GVE_DEVICE_OPTION_TOO_BIG_FMT, + "Nic Timestamp"); + *dev_op_nic_timestamp =3D (void *)(option + 1); + break; default: /* If we don't recognize the option just continue * without doing anything. @@ -246,6 +264,7 @@ gve_process_device_options(struct gve_priv *priv, struct gve_device_option_buffer_sizes **dev_op_buffer_sizes, struct gve_device_option_flow_steering **dev_op_flow_steering, struct gve_device_option_rss_config **dev_op_rss_config, + struct gve_device_option_nic_timestamp **dev_op_nic_timestamp, struct gve_device_option_modify_ring **dev_op_modify_ring) { const int num_options =3D be16_to_cpu(descriptor->num_device_options); @@ -269,6 +288,7 @@ gve_process_device_options(struct gve_priv *priv, dev_op_dqo_rda, dev_op_jumbo_frames, dev_op_dqo_qpl, dev_op_buffer_sizes, dev_op_flow_steering, dev_op_rss_config, + dev_op_nic_timestamp, dev_op_modify_ring); dev_opt =3D next_opt; } @@ -904,6 +924,8 @@ static void gve_enable_supported_features(struct gve_pr= iv *priv, *dev_op_flow_steering, const struct gve_device_option_rss_config *dev_op_rss_config, + const struct gve_device_option_nic_timestamp + *dev_op_nic_timestamp, const struct gve_device_option_modify_ring *dev_op_modify_ring) { @@ -980,10 +1002,15 @@ static void gve_enable_supported_features(struct gve= _priv *priv, "RSS device option enabled with key size of %u, lut size of %u.\n", priv->rss_key_size, priv->rss_lut_size); } + + if (dev_op_nic_timestamp && + (supported_features_mask & GVE_SUP_NIC_TIMESTAMP_MASK)) + priv->nic_timestamp_supported =3D true; } =20 int gve_adminq_describe_device(struct gve_priv *priv) { + struct gve_device_option_nic_timestamp *dev_op_nic_timestamp =3D NULL; struct gve_device_option_flow_steering *dev_op_flow_steering =3D NULL; struct gve_device_option_buffer_sizes *dev_op_buffer_sizes =3D NULL; struct gve_device_option_jumbo_frames *dev_op_jumbo_frames =3D NULL; @@ -1024,6 +1051,7 @@ int gve_adminq_describe_device(struct gve_priv *priv) &dev_op_buffer_sizes, &dev_op_flow_steering, &dev_op_rss_config, + &dev_op_nic_timestamp, &dev_op_modify_ring); if (err) goto free_device_descriptor; @@ -1088,7 +1116,8 @@ int gve_adminq_describe_device(struct gve_priv *priv) gve_enable_supported_features(priv, supported_features_mask, dev_op_jumbo_frames, dev_op_dqo_qpl, dev_op_buffer_sizes, dev_op_flow_steering, - dev_op_rss_config, dev_op_modify_ring); + dev_op_rss_config, dev_op_nic_timestamp, + dev_op_modify_ring); =20 free_device_descriptor: dma_pool_free(priv->adminq_pool, descriptor, descriptor_bus); diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/eth= ernet/google/gve/gve_adminq.h index 228217458275..42466ee640f1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -174,6 +174,12 @@ struct gve_device_option_rss_config { =20 static_assert(sizeof(struct gve_device_option_rss_config) =3D=3D 8); =20 +struct gve_device_option_nic_timestamp { + __be32 supported_features_mask; +}; + +static_assert(sizeof(struct gve_device_option_nic_timestamp) =3D=3D 4); + /* Terminology: * * RDA - Raw DMA Addressing - Buffers associated with SKBs are directly DMA @@ -192,6 +198,7 @@ enum gve_dev_opt_id { GVE_DEV_OPT_ID_JUMBO_FRAMES =3D 0x8, GVE_DEV_OPT_ID_BUFFER_SIZES =3D 0xa, GVE_DEV_OPT_ID_FLOW_STEERING =3D 0xb, + GVE_DEV_OPT_ID_NIC_TIMESTAMP =3D 0xd, GVE_DEV_OPT_ID_RSS_CONFIG =3D 0xe, }; =20 @@ -206,6 +213,7 @@ enum gve_dev_opt_req_feat_mask { GVE_DEV_OPT_REQ_FEAT_MASK_MODIFY_RING =3D 0x0, GVE_DEV_OPT_REQ_FEAT_MASK_FLOW_STEERING =3D 0x0, GVE_DEV_OPT_REQ_FEAT_MASK_RSS_CONFIG =3D 0x0, + GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP =3D 0x0, }; =20 enum gve_sup_feature_mask { @@ -214,6 +222,7 @@ enum gve_sup_feature_mask { GVE_SUP_BUFFER_SIZES_MASK =3D 1 << 4, GVE_SUP_FLOW_STEERING_MASK =3D 1 << 5, GVE_SUP_RSS_CONFIG_MASK =3D 1 << 7, + GVE_SUP_NIC_TIMESTAMP_MASK =3D 1 << 8, }; =20 #define GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING 0x0 --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 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 8C2642D1931 for ; Thu, 22 May 2025 23:57:44 +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=1747958266; cv=none; b=oBglnLh03Q3tjrV0sh72CpYUXa7Q7FzTMMxNSSLTF8lVzkez9nWZZ18sXzYaoDUjcK5QFgkdVVZ0kpEbx+2OIUoUs6Fi3G+UxzS6w+C8hZlRC37ms8Sk/Rit/g0Tsl60N9Gh/rAEHRfVjxSvg92Ark4nfdesNd3lZtics/39Jc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958266; c=relaxed/simple; bh=qt90dNzGxg9DPkAmUlCuy3Xdty+pLbICXYrCaTjXO+Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=q2MLWna6mbeTiroG7rHuXvkrRIUoutiD4jDC32qfDk9jwTUyBUnvwzMIzXWXaleCUT+xM3bQhlEM4Ur0Yq6urDdQ+W7SNwDkSb9w2FE9l/aRl0W6OFxO6+HDD7OznD/rbDjE/5t/hHlIO1jpQVp0Gd6jwsvs/Fy54gXpwyFXNa0= 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=j8bPp18p; 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--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="j8bPp18p" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-740adfc7babso7145345b3a.0 for ; Thu, 22 May 2025 16:57:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958264; x=1748563064; 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=1RHgOpvqvGX2+R7Cv6qDiOLDKhDyhCnfeTXds2LJq2o=; b=j8bPp18pxK3XaG56mojLDz7ImZPsG8hkYkmv+SGWgcStxNjQ8GKdQsacOuN5Y4i0r5 7zzgiRcDO4oaWtRZNVP3oibTgmxSo3qesrlKRWnH0e6uTmLLkQ7qjeO66nro66ba5dGv 8TRfKxagLfSIJCrVl08U/g0s0N/c+bh3RXO7xR0QK0WbOgxWMKPrSbUuy0DRHvoZzt2E Jzjgmp5ZTajQ9dPLNXFKt3YdjwTAS5iDLChov4NJnyOvdaYDuavxPU65yVnK5g1S+eXW zK510JySwj6Ri6xxktQkra8BC7WM2UQaCZVNKGPTP6ewNd+4gdzJ6KLrqNt8PEGCGGxS e8MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958264; x=1748563064; 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=1RHgOpvqvGX2+R7Cv6qDiOLDKhDyhCnfeTXds2LJq2o=; b=B3P36g/pwQmzIj+LzY3Je43vaMcfJzWyfZCRLvLllf5xEsbi+6cvG2FMDlhlv/9Vja RAl23S8X5fWyATx0lAfVlGxe6nsIzZWRjgBhDGX8zXFJiKa1Z2McFMKZbOFZaKT13tkL ZaC5Y5joyJul/1o1sK3g874dxdGdr5sHTS6/ATiI0YynlUCoevG5Xto+PMzTUc6vO36r UJ96O/pY2TV5wfYMOk8bEzZOS+8KVpdPFOtzCeIXbWQ7CudGYQQxptTDZ5z2ZXL3AeVM CWozsviDLZM9AeiST/8hd/cxkaD7LWsKAJCNQgaVOMJrFwnxqd+xjY2tHfOgjlQ2LX3n 2BVQ== X-Forwarded-Encrypted: i=1; AJvYcCWJ7e7CFpH5BWgu0M1C3bgxLocQvj8FjfECpmyZHXjBH8JYfTleEcTNRNG6QIghCLXNmhdZKXG+cPrj6fs=@vger.kernel.org X-Gm-Message-State: AOJu0YzALfxl/0ny1TdD1jlgnDnu8Ir8CwJyA2JvAGRW9tRVLvxwjLcN MvUKzgaacjajLIR6G57//i7mVoc8sgJNsQ7pYymGaBR1pmqxRbrsTkVRtz/kFf7QJ5XrqQOyd1x ucrCRHIdj7TJuexSh1gZyp9gowQ== X-Google-Smtp-Source: AGHT+IFMuCVlsFe1kseuL5dPtOTNNWDFpVumoupMOKsHQInpoZYU6KBwicqyFW5lEXU05JGzdkhjEPaa9gC4qMbY6A== X-Received: from pfwz12.prod.google.com ([2002:a05:6a00:1d8c:b0:732:858a:729f]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2302:b0:740:b5f9:90b4 with SMTP id d2e1a72fcca58-745ed8f5bfemr1136249b3a.17.1747958263786; Thu, 22 May 2025 16:57:43 -0700 (PDT) Date: Thu, 22 May 2025 23:57:31 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-3-hramamurthy@google.com> Subject: [PATCH net-next v3 2/8] gve: Add adminq command to report nic timestamp From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org, Jeff Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Add an adminq command to read NIC's hardware clock. The driver allocates dma memory and passes that dma memory address to the device. The device then writes the clock to the given address. Signed-off-by: Jeff Rogers Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 1 + drivers/net/ethernet/google/gve/gve_adminq.c | 20 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_adminq.h | 17 ++++++++++++++++ drivers/net/ethernet/google/gve/gve_ethtool.c | 3 ++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index e9b2c1394b1f..cf6947731a9b 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -813,6 +813,7 @@ struct gve_priv { u32 adminq_set_driver_parameter_cnt; u32 adminq_report_stats_cnt; u32 adminq_report_link_speed_cnt; + u32 adminq_report_nic_timestamp_cnt; u32 adminq_get_ptype_map_cnt; u32 adminq_verify_driver_compatibility_cnt; u32 adminq_query_flow_rules_cnt; diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index ae20d2f7e6e1..f57913a673b4 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -326,6 +326,7 @@ int gve_adminq_alloc(struct device *dev, struct gve_pri= v *priv) priv->adminq_set_driver_parameter_cnt =3D 0; priv->adminq_report_stats_cnt =3D 0; priv->adminq_report_link_speed_cnt =3D 0; + priv->adminq_report_nic_timestamp_cnt =3D 0; priv->adminq_get_ptype_map_cnt =3D 0; priv->adminq_query_flow_rules_cnt =3D 0; priv->adminq_cfg_flow_rule_cnt =3D 0; @@ -564,6 +565,9 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, case GVE_ADMINQ_REPORT_LINK_SPEED: priv->adminq_report_link_speed_cnt++; break; + case GVE_ADMINQ_REPORT_NIC_TIMESTAMP: + priv->adminq_report_nic_timestamp_cnt++; + break; case GVE_ADMINQ_GET_PTYPE_MAP: priv->adminq_get_ptype_map_cnt++; break; @@ -1229,6 +1233,22 @@ int gve_adminq_report_link_speed(struct gve_priv *pr= iv) return err; } =20 +int gve_adminq_report_nic_ts(struct gve_priv *priv, + dma_addr_t nic_ts_report_addr) +{ + union gve_adminq_command cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode =3D cpu_to_be32(GVE_ADMINQ_REPORT_NIC_TIMESTAMP); + cmd.report_nic_ts =3D (struct gve_adminq_report_nic_ts) { + .nic_ts_report_len =3D + cpu_to_be64(sizeof(struct gve_nic_ts_report)), + .nic_ts_report_addr =3D cpu_to_be64(nic_ts_report_addr), + }; + + return gve_adminq_execute_cmd(priv, &cmd); +} + int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, struct gve_ptype_lut *ptype_lut) { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/eth= ernet/google/gve/gve_adminq.h index 42466ee640f1..9360b84536d5 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -27,6 +27,7 @@ enum gve_adminq_opcodes { GVE_ADMINQ_GET_PTYPE_MAP =3D 0xE, GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY =3D 0xF, GVE_ADMINQ_QUERY_FLOW_RULES =3D 0x10, + GVE_ADMINQ_REPORT_NIC_TIMESTAMP =3D 0x11, GVE_ADMINQ_QUERY_RSS =3D 0x12, =20 /* For commands that are larger than 56 bytes */ @@ -401,6 +402,19 @@ struct gve_adminq_report_link_speed { =20 static_assert(sizeof(struct gve_adminq_report_link_speed) =3D=3D 8); =20 +struct gve_adminq_report_nic_ts { + __be64 nic_ts_report_len; + __be64 nic_ts_report_addr; +}; + +static_assert(sizeof(struct gve_adminq_report_nic_ts) =3D=3D 16); + +struct gve_nic_ts_report { + __be64 nic_timestamp; /* NIC clock in nanoseconds */ + __be64 reserved1; + __be64 reserved2; +}; + struct stats { __be32 stat_name; __be32 queue_id; @@ -594,6 +608,7 @@ union gve_adminq_command { struct gve_adminq_query_flow_rules query_flow_rules; struct gve_adminq_configure_rss configure_rss; struct gve_adminq_query_rss query_rss; + struct gve_adminq_report_nic_ts report_nic_ts; struct gve_adminq_extended_command extended_command; }; }; @@ -633,6 +648,8 @@ int gve_adminq_reset_flow_rules(struct gve_priv *priv); int gve_adminq_query_flow_rules(struct gve_priv *priv, u16 query_opcode, u= 32 starting_loc); int gve_adminq_configure_rss(struct gve_priv *priv, struct ethtool_rxfh_pa= ram *rxfh); int gve_adminq_query_rss_config(struct gve_priv *priv, struct ethtool_rxfh= _param *rxfh); +int gve_adminq_report_nic_ts(struct gve_priv *priv, + dma_addr_t nic_ts_report_addr); =20 struct gve_ptype_lut; int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/et= hernet/google/gve/gve_ethtool.c index 3c1da0cf3f61..d0628e25a82d 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -76,7 +76,7 @@ static const char gve_gstrings_adminq_stats[][ETH_GSTRING= _LEN] __nonstring_array "adminq_dcfg_device_resources_cnt", "adminq_set_driver_parameter_cnt", "adminq_report_stats_cnt", "adminq_report_link_speed_cnt", "adminq_get_pt= ype_map_cnt", "adminq_query_flow_rules", "adminq_cfg_flow_rule", "adminq_cfg_rss_cnt", - "adminq_query_rss_cnt", + "adminq_query_rss_cnt", "adminq_report_nic_timestamp_cnt", }; =20 static const char gve_gstrings_priv_flags[][ETH_GSTRING_LEN] =3D { @@ -456,6 +456,7 @@ gve_get_ethtool_stats(struct net_device *netdev, data[i++] =3D priv->adminq_cfg_flow_rule_cnt; data[i++] =3D priv->adminq_cfg_rss_cnt; data[i++] =3D priv->adminq_query_rss_cnt; + data[i++] =3D priv->adminq_report_nic_timestamp_cnt; } =20 static void gve_get_channels(struct net_device *netdev, --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 3B5D624DCE8 for ; Thu, 22 May 2025 23:57:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958267; cv=none; b=ia++7yoQg+IykQxazIxhGKQ6wSaSoGjDE7tzh4eYTrXqWgdL9oxhEUlT52uuxx3mznNT15R00U7jLyoHM5DYadgNAn9Lu14sHxzvgNBic8j1JhrCEeV/UWzKWyQb8+jTTBuN+JPJPYhWY5MJHIDmvLYs0sfuDkyTXpaI08ue2Nc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958267; c=relaxed/simple; bh=/d1wmfmY/H2ZGTSo9UGf2XcEy9s/ROiMcqO2TlSq5CQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=MNioGI9Jm2332COLaHwmx6XPd0qiv0Kw2je2UV/vTAqR5Pk/GGNR3hsay3XI8kqcJ5rwE6mNugyc48x6o5BfFS/7WiXPtQdOEfZ4yqU6mWG4Z3Lm1QkK0UbkCEprIKw4ki2ecmR/eeSNJXVKt9wTF0VvUMwcKR6evVIJQHARiU4= 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=ZEWh/Cp7; arc=none smtp.client-ip=209.85.210.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--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="ZEWh/Cp7" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-74089884644so7537339b3a.3 for ; Thu, 22 May 2025 16:57:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958265; x=1748563065; 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=m3lfvrPJ0AXxA1NVOjRkYI+TzJFJEUDkaJgP2lifyhg=; b=ZEWh/Cp7g5EYZQk3C4eFimQxcXu6sT4dn+T+LjTUuENy+qjEo5kJ20XrbGhtM6o74s vJ3m4mr8wQ3mwEiFC8Fha92j+g7F7GUhLLp80lNugKYcxy/1f/up8m4UxGT0JhsPFgRl w+rKsj3UKUeYnSwSVXvr+Zv1lGMMDfVojHK7hMgAuRcVZWKnKFCLlc+PLnIKG4dlaD/m 12GWR+uOUDGzEwY6gT16h/dcIkxFkxS3x+wEpZ87mbwWhlEkF4T7mJOlqwRuAlZ44ugD wP3RC5BZlIoyP1UWFYB893kLiPBXNJTvWCzYm9d2Uhp5rh+Bbvk529Ce4Z+stGSKmAc4 cRPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958265; x=1748563065; 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=m3lfvrPJ0AXxA1NVOjRkYI+TzJFJEUDkaJgP2lifyhg=; b=WGAygpJgOiYmsk8XlB2Hef9P0maYvzaodJMATZzwYnKCm9zwHyCb/myPDY1ckWNA5p teTZReCSPZAEIKkvj3FOSlo+jPMzm/b+uTjuJxJyVcD3EICKvI2xemymd2VVAAGSyFs6 OQrAhYgLC3w2lG2vq444QO6aC/C3NhdMkPSk21wvhxvdc5ntDIbhjnWpvW9DNV7l5iEx xpP2yy3Jw1uKbgQ/XtB7tnE5DWqdUyaEVPAglFVoBaPHosEtySQuquePfm3B0Al/BkhB 8w2CFyTubUXOENlR1cXey/343mJn7TDv0PC0/tjcTB+ReG8cKVZI4PhuNkHrSYfbg0J1 REHA== X-Forwarded-Encrypted: i=1; AJvYcCX++RNAyCM/jk1WvBvOgSfLOrgeFhf63PArDWo0jeqy6sAvqVFXTlJr59YHLcnNNn+9KDJUnX87gORsZSs=@vger.kernel.org X-Gm-Message-State: AOJu0YzTpsKp11AmITXaMUZ3363L7Ef4hg+kz/ktomxFlwnc/VszL9wn h/ETsZHobZKai51wr/PsPBVHqRCZzFfBw39VbczsHaCF/bKdhFpGKDWF8A0UxOXrOI17Y7MpLcC s6vkiViLsbfHFCqMiK4Q7rZWR3A== X-Google-Smtp-Source: AGHT+IFyQmLu0B+sReid8v2Gzfs5xGL7Y5gVFJhFAppmYxeZxmGUm/kaohdm2+eedhxluTWc+13DhQfworWepJuK/Q== X-Received: from pfus6.prod.google.com ([2002:a05:6a00:8c6:b0:736:a134:94ad]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:66d8:b0:740:9d6b:db1a with SMTP id d2e1a72fcca58-742acd507ccmr31565135b3a.15.1747958265417; Thu, 22 May 2025 16:57:45 -0700 (PDT) Date: Thu, 22 May 2025 23:57:32 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-4-hramamurthy@google.com> Subject: [PATCH net-next v3 3/8] gve: Add initial PTP device support From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the device supports reading of the nic clock, add support to initialize and register the PTP clock. Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/Kconfig | 1 + drivers/net/ethernet/google/gve/Makefile | 4 +- drivers/net/ethernet/google/gve/gve.h | 8 +++ drivers/net/ethernet/google/gve/gve_ptp.c | 59 +++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/google/gve/gve_ptp.c diff --git a/drivers/net/ethernet/google/Kconfig b/drivers/net/ethernet/goo= gle/Kconfig index 564862a57124..14c9431e15e5 100644 --- a/drivers/net/ethernet/google/Kconfig +++ b/drivers/net/ethernet/google/Kconfig @@ -18,6 +18,7 @@ if NET_VENDOR_GOOGLE config GVE tristate "Google Virtual NIC (gVNIC) support" depends on (PCI_MSI && (X86 || CPU_LITTLE_ENDIAN)) + depends on PTP_1588_CLOCK_OPTIONAL select PAGE_POOL help This driver supports Google Virtual NIC (gVNIC)" diff --git a/drivers/net/ethernet/google/gve/Makefile b/drivers/net/etherne= t/google/gve/Makefile index 4520f1c07a63..e0ec227a50f7 100644 --- a/drivers/net/ethernet/google/gve/Makefile +++ b/drivers/net/ethernet/google/gve/Makefile @@ -1,5 +1,7 @@ # Makefile for the Google virtual Ethernet (gve) driver =20 obj-$(CONFIG_GVE) +=3D gve.o -gve-objs :=3D gve_main.o gve_tx.o gve_tx_dqo.o gve_rx.o gve_rx_dqo.o gve_e= thtool.o gve_adminq.o gve_utils.o gve_flow_rule.o \ +gve-y :=3D gve_main.o gve_tx.o gve_tx_dqo.o gve_rx.o gve_rx_dqo.o gve_etht= ool.o gve_adminq.o gve_utils.o gve_flow_rule.o \ gve_buffer_mgmt_dqo.o + +gve-$(CONFIG_PTP_1588_CLOCK) +=3D gve_ptp.o diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index cf6947731a9b..8d2aa654fd4c 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -750,6 +751,12 @@ struct gve_rss_config { u32 *hash_lut; }; =20 +struct gve_ptp { + struct ptp_clock_info info; + struct ptp_clock *clock; + struct gve_priv *priv; +}; + struct gve_priv { struct net_device *dev; struct gve_tx_ring *tx; /* array of tx_cfg.num_queues */ @@ -874,6 +881,7 @@ struct gve_priv { =20 /* True if the device supports reading the nic clock */ bool nic_timestamp_supported; + struct gve_ptp *ptp; }; =20 enum gve_service_task_flags_bit { diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethern= et/google/gve/gve_ptp.c new file mode 100644 index 000000000000..293f8dd49afe --- /dev/null +++ b/drivers/net/ethernet/google/gve/gve_ptp.c @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* Google virtual Ethernet (gve) driver + * + * Copyright (C) 2025 Google LLC + */ + +#include "gve.h" + +static const struct ptp_clock_info gve_ptp_caps =3D { + .owner =3D THIS_MODULE, + .name =3D "gve clock", +}; + +static int __maybe_unused gve_ptp_init(struct gve_priv *priv) +{ + struct gve_ptp *ptp; + int err; + + if (!priv->nic_timestamp_supported) { + dev_dbg(&priv->pdev->dev, "Device does not support PTP\n"); + return -EOPNOTSUPP; + } + + priv->ptp =3D kzalloc(sizeof(*priv->ptp), GFP_KERNEL); + if (!priv->ptp) + return -ENOMEM; + + ptp =3D priv->ptp; + ptp->info =3D gve_ptp_caps; + ptp->clock =3D ptp_clock_register(&ptp->info, &priv->pdev->dev); + + if (IS_ERR(ptp->clock)) { + dev_err(&priv->pdev->dev, "PTP clock registration failed\n"); + err =3D PTR_ERR(ptp->clock); + goto free_ptp; + } + + ptp->priv =3D priv; + return 0; + +free_ptp: + kfree(ptp); + priv->ptp =3D NULL; + return err; +} + +static void __maybe_unused gve_ptp_release(struct gve_priv *priv) +{ + struct gve_ptp *ptp =3D priv->ptp; + + if (!ptp) + return; + + if (ptp->clock) + ptp_clock_unregister(ptp->clock); + + kfree(ptp); + priv->ptp =3D NULL; +} --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 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 5B6002D29BB for ; Thu, 22 May 2025 23:57:47 +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=1747958269; cv=none; b=UrtkSsz+JYURgnJfrHLKV0E3+B5gukDek/UfE5ezu381je8mO329fJ2hmUArW1QxdgZWTdB2BSJs83RGhovWeFtig4wioO2Ck8FHqv9H6mmyOM+OTrk9S0u6Q2qO/+AAFXljkr1mXuK6RNtvFhTXSr4QocGUaag6id1FqJT7Te8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958269; c=relaxed/simple; bh=rKe+adcj5bthS6JtPka9p9/KvrSfZnM2t7JaWTyjfNU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nMwwuEvjv6GMJsQW7KZOO3y37BxnJTC6aQNfYqpw+QkjUK4kQpBFyl6X9EI4lf82n2/NSpILr4YuG4mbeby3DnXdT+2vFijGbNTTH2ngQYgDeY8MF3zxWi20xEhS4jCNm+PMZ7QiReUVTtrE0oBZiMDQEfQgw9ONC1LjFiptVYU= 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=3UYYgsOn; 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--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="3UYYgsOn" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-742cc20e11eso3880148b3a.1 for ; Thu, 22 May 2025 16:57:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958267; x=1748563067; 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=55JMcrpNKoKOC4/lL88wetlCV1r8D6JepOyDlFCl+80=; b=3UYYgsOnlZspws09n7VVyadA13QuGoH5g7L/L9d/1zR+lnyrKEuBL8znhOxbTa7qkL mwkivrztGGSsgNrAQ44ue8BDOfNdWiaT5nYJ7j3QgkvkIrhYzHqvHPRSThzhngkK+SFY kpn6P3dVFhQEKJ3TeP1MWi+i09ydVvKuPwapJgVf/N5o29ZfQiIuAUdnmSXrgr+6/1np EAx7+cwcDlX3JBDqxnwib9BqHWT+GSHC8HWocu9JHSwDBYbd4eFyCz1vz4/0c2erJNup Vg2fK5CT+LCRBM9kg5hV0uXSLrfQ4DeDWU3ilBRWhDzlVnNb3k8NvNUywyMxcnruwABU gBYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958267; x=1748563067; 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=55JMcrpNKoKOC4/lL88wetlCV1r8D6JepOyDlFCl+80=; b=LTINjwNNxcBX0h0OPguNiLHUh6hzVcf1WYxAtUYZYl/ErZSTittI8V/61MD4W9+PHp DI9EJB0N0cfxBWWAfP4CWq+hBlvEopHy8zugO7Hb4bTJM3FYf62PNpgrePm8W/hPG83s YdYuB3bNgOycqAo8aATiWNNq8kMlvnYQINtvGPUue+33F2/yAB60cNKrAVzYLpopDCxw Su5OjPDVvzAmEvHeBpKnBlFeCyyewFDKSXh84AxKiOhZYSuNBOVIo9DwCzKrhzE492Qf X+5P0F42Ff7o3wcSpY6XJRxHWmjhrwmPHvWC/bH16ZmqG4AuxQkx6WoTmsyytFOeP0at PJhw== X-Forwarded-Encrypted: i=1; AJvYcCUz6ZlsRx2a/kuFiEviB3Wm5vhq6nba8JLfYjV4x5cyiI26gRIHBoXxlE6CmmxULgleF2VLib5qyLHZxRk=@vger.kernel.org X-Gm-Message-State: AOJu0YxnXlLvba2n+0JRxBMy+h572pdC0W2XNGF6Hor01h3EFdYqNOZQ iMNHB4lM0d7OS4nivFTtk36uToywrL699MODjZZQTpFBrEVcE21u0Z8rfeRGjVU+UjGWQOtDmBB bChE4u30cwiLDob1hx6b6AWtQuQ== X-Google-Smtp-Source: AGHT+IFisGKBNBcLluR0PM+qcaDfXiwv7i9aqZZIIJ1lyzKt+SV81C987vnjksRoorMicy9+6u0N9DO1L4Fz9roekQ== X-Received: from pfhj12.prod.google.com ([2002:a62:e90c:0:b0:736:38af:afeb]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:aa7:88c8:0:b0:742:8d52:62f1 with SMTP id d2e1a72fcca58-742accc545emr40187202b3a.8.1747958266813; Thu, 22 May 2025 16:57:46 -0700 (PDT) Date: Thu, 22 May 2025 23:57:33 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-5-hramamurthy@google.com> Subject: [PATCH net-next v3 4/8] gve: Add adminq lock for queues creation and destruction From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ziwei Xiao Adminq commands for queues creation and destruction were not consistently protected by the driver's adminq_lock. This was previously benign as these operations were always initiated from contexts holding kernel-level locks (e.g., rtnl_lock, netdev_lock), which provided serialization. Upcoming PTP aux_work will issue adminq commands directly from the driver to read the NIC clock, without such kernel lock protection. To prevent race conditions with this new PTP work, this patch ensures the adminq_lock is held during queues creation and destruction. Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- Changes in v2: - Send this patch together with the rx timestamping patches to net-next instead of sending it to net (Jakub Kicinski) - Remove the unnecessary cleanup (Jakub Kicinski) --- drivers/net/ethernet/google/gve/gve_adminq.c | 47 +++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index f57913a673b4..a0cc05a9eefc 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -463,6 +463,8 @@ static int gve_adminq_kick_and_wait(struct gve_priv *pr= iv) int tail, head; int i; =20 + lockdep_assert_held(&priv->adminq_lock); + tail =3D ioread32be(&priv->reg_bar0->adminq_event_counter); head =3D priv->adminq_prod_cnt; =20 @@ -488,9 +490,6 @@ static int gve_adminq_kick_and_wait(struct gve_priv *pr= iv) return 0; } =20 -/* This function is not threadsafe - the caller is responsible for any - * necessary locks. - */ static int gve_adminq_issue_cmd(struct gve_priv *priv, union gve_adminq_command *cmd_orig) { @@ -498,6 +497,8 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, u32 opcode; u32 tail; =20 + lockdep_assert_held(&priv->adminq_lock); + tail =3D ioread32be(&priv->reg_bar0->adminq_event_counter); =20 // Check if next command will overflow the buffer. @@ -733,13 +734,19 @@ int gve_adminq_create_tx_queues(struct gve_priv *priv= , u32 start_id, u32 num_que int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D start_id; i < start_id + num_queues; i++) { err =3D gve_adminq_create_tx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static void gve_adminq_get_create_rx_queue_cmd(struct gve_priv *priv, @@ -812,13 +819,19 @@ int gve_adminq_create_rx_queues(struct gve_priv *priv= , u32 num_queues) int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D 0; i < num_queues; i++) { err =3D gve_adminq_create_rx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static int gve_adminq_destroy_tx_queue(struct gve_priv *priv, u32 queue_in= dex) @@ -844,13 +857,19 @@ int gve_adminq_destroy_tx_queues(struct gve_priv *pri= v, u32 start_id, u32 num_qu int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D start_id; i < start_id + num_queues; i++) { err =3D gve_adminq_destroy_tx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static void gve_adminq_make_destroy_rx_queue_cmd(union gve_adminq_command = *cmd, @@ -885,13 +904,19 @@ int gve_adminq_destroy_rx_queues(struct gve_priv *pri= v, u32 num_queues) int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D 0; i < num_queues; i++) { err =3D gve_adminq_destroy_rx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static void gve_set_default_desc_cnt(struct gve_priv *priv, --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 0E9872D3224 for ; Thu, 22 May 2025 23:57:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958270; cv=none; b=aYcH5vwIFbRQg/Z5+iqLskdGzjQGUA4BoAwy8TDC3eV7t6rNELQzvXMBxD+Nx+mBNS8HNJ+DsW042NKB9ZK1tP/aVt5NOb+1M1JGH6XwctzIq2ygaCwYj7gI8wFzh+qWEmxCdrauGjjW3EOHvWiyyvV7GqO65hs88HRXckxaC14= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958270; c=relaxed/simple; bh=a4VqRaia5JYPq57558dzEWArK2e1J4BTgLt/mTkBsWI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=fyJYGQlm5HBAtfMGQ7h+rQUxaxs96xMec5sbYJzE67goBDJ3HLidQ6Ixj1kN5BvNMgYzv9D5Nicx58M/hIGbveX6MFAAe4j+CuQLTrXHu1sdvhRXsm6zQDrHDMUIwMvoRHsDFyWyApHfe9111gzZ+JKvz7KX4wVFXTpwDQyXyGU= 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=EDAi81be; arc=none smtp.client-ip=209.85.210.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--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="EDAi81be" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-742cc20e11eso3880152b3a.1 for ; Thu, 22 May 2025 16:57:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958268; x=1748563068; 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=g1Dqa/h1soTp69c+jO+vPQcLca0UczAuPPAO2k24wLg=; b=EDAi81bec8ZtIBujFinZJVo1GfHyIEaEYGGj1fvTCQt99WoeE2DsXrnNZCqpCsOe1j dZDdUzC+ntfV2X+i1vXFN+tE44jmu5TB5coT1LoEyO7TNAkQLy5JaxIPiYdvsxgazGxc vcc0tE99EiR5gnzMXcTvM8JewjDnYU/vQOfv+cLeJKH/IPx8N4usb65ATNwdzJTCfVo3 vPOGM9cawjxXq2cEE0sawwU3DHdUIytdOCWtYKJsOJ7ogiloHfvUdG5xRRKGxZG4LU5X NEaFlTvLXF6oYE6JM5GR3TP5nRS/r+ouYEaU64SKe82HzX7JkP303Ps/iZQe9oAjJL6N +I7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958268; x=1748563068; 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=g1Dqa/h1soTp69c+jO+vPQcLca0UczAuPPAO2k24wLg=; b=dysJ4vFl5jzxZYTGAORxYGWPZKYX3XX54/M+A/K1wA5Xxlq7OkGlARQwe5B5OxUksD XNMquMdHVu/oa7mrk+rg5WXvX8RTumRP+I9kJTH58sevNleFBt3ijGKsgEG7Xfw92Yp5 g8ewtLtFWX5MRfOqFywfc3/hz42ZKBXt29ZTXnpDBL61+8scb/6HihEgWdifeiqLC9St NI/ucShsGQEFFln5a6dk/Q8T4KFf80R9qcAvy0SuYPYJw4Ls4D2GCAqaYBQidKPNTzNK KplEmAiNkVRf1L9KP212ACXqRjStetZU/rI7YtkWjWWgzSHMAsU56h8byM7G6kouN66g xK+Q== X-Forwarded-Encrypted: i=1; AJvYcCUJ2BI4Oh4pTvh6KLXZBq2R+IC142bXF7ZxdN8bkSHuTj/Bfn1KlvwUckQLYihtNSwuTAkPghVFwxg0VWg=@vger.kernel.org X-Gm-Message-State: AOJu0YxIKu1YSjAj/Wlqu9ic19feQlGQsZplgJN0p6FuYM7X9ISGso+k 9lVYv6sPK6j3h7ElbyILQ7osE4DYJHyqtSzddzAuURVHDqXe75qD6ehC3QDWwExSuphQKFe4Kw4 +IWEd9zqGZ/ah8p8wyi7rtFN7Sw== X-Google-Smtp-Source: AGHT+IGwki/Y2IVocXy02XX5qbT7c1tp+xm8ILZ1XfHcJTMpQOOCeGljPIhF4SWHZ0aaQj47N8jhPgFw1Gdv3/UOcA== X-Received: from pfhm3.prod.google.com ([2002:a62:f203:0:b0:736:3e92:66d7]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3a27:b0:736:6ecd:8e34 with SMTP id d2e1a72fcca58-742acd5071emr36759912b3a.18.1747958268187; Thu, 22 May 2025 16:57:48 -0700 (PDT) Date: Thu, 22 May 2025 23:57:34 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-6-hramamurthy@google.com> Subject: [PATCH net-next v3 5/8] gve: Add support to query the nic clock From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Kevin Yang Query the nic clock and store the results. The timestamp delivered in descriptors has a wraparound time of ~4 seconds so 250ms is chosen as the sync cadence to provide a balance between performance, and drift potential when we do start associating host time and nic time. Leverage PTP's aux_work to query the nic clock periodically. Signed-off-by: Kevin Yang Signed-off-by: John Fraker Signed-off-by: Tim Hostetler Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy Reviewed-by: Vadim Fedorenko --- Changes in v2: - Utilize the ptp's aux_work instead of delayed_work (Jakub Kicinski, Vadim Fedorenko) --- drivers/net/ethernet/google/gve/gve.h | 15 +++++ drivers/net/ethernet/google/gve/gve_ptp.c | 77 ++++++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 8d2aa654fd4c..97054b272e40 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -882,6 +882,9 @@ struct gve_priv { /* True if the device supports reading the nic clock */ bool nic_timestamp_supported; struct gve_ptp *ptp; + struct gve_nic_ts_report *nic_ts_report; + dma_addr_t nic_ts_report_bus; + u64 last_sync_nic_counter; /* Clock counter from last NIC TS report */ }; =20 enum gve_service_task_flags_bit { @@ -1261,6 +1264,18 @@ int gve_del_flow_rule(struct gve_priv *priv, struct = ethtool_rxnfc *cmd); int gve_flow_rules_reset(struct gve_priv *priv); /* RSS config */ int gve_init_rss_config(struct gve_priv *priv, u16 num_queues); +/* PTP and timestamping */ +#if IS_ENABLED(CONFIG_PTP_1588_CLOCK) +int gve_init_clock(struct gve_priv *priv); +void gve_teardown_clock(struct gve_priv *priv); +#else /* CONFIG_PTP_1588_CLOCK */ +static inline int gve_init_clock(struct gve_priv *priv) +{ + return -EOPNOTSUPP; +} + +static inline void gve_teardown_clock(struct gve_priv *priv) { } +#endif /* CONFIG_PTP_1588_CLOCK */ /* report stats handling */ void gve_handle_report_stats(struct gve_priv *priv); /* exported by ethtool.c */ diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethern= et/google/gve/gve_ptp.c index 293f8dd49afe..b6e18ad20fa9 100644 --- a/drivers/net/ethernet/google/gve/gve_ptp.c +++ b/drivers/net/ethernet/google/gve/gve_ptp.c @@ -5,13 +5,52 @@ */ =20 #include "gve.h" +#include "gve_adminq.h" + +/* Interval to schedule a nic timestamp calibration, 250ms. */ +#define GVE_NIC_TS_SYNC_INTERVAL_MS 250 + +/* Read the nic timestamp from hardware via the admin queue. */ +static int gve_clock_nic_ts_read(struct gve_priv *priv) +{ + u64 nic_raw; + int err; + + err =3D gve_adminq_report_nic_ts(priv, priv->nic_ts_report_bus); + if (err) + return err; + + nic_raw =3D be64_to_cpu(priv->nic_ts_report->nic_timestamp); + WRITE_ONCE(priv->last_sync_nic_counter, nic_raw); + + return 0; +} + +static long gve_ptp_do_aux_work(struct ptp_clock_info *info) +{ + const struct gve_ptp *ptp =3D container_of(info, struct gve_ptp, info); + struct gve_priv *priv =3D ptp->priv; + int err; + + if (gve_get_reset_in_progress(priv) || !gve_get_admin_queue_ok(priv)) + goto out; + + err =3D gve_clock_nic_ts_read(priv); + if (err && net_ratelimit()) + dev_err(&priv->pdev->dev, + "%s read err %d\n", __func__, err); + +out: + return msecs_to_jiffies(GVE_NIC_TS_SYNC_INTERVAL_MS); +} =20 static const struct ptp_clock_info gve_ptp_caps =3D { .owner =3D THIS_MODULE, .name =3D "gve clock", + .do_aux_work =3D gve_ptp_do_aux_work, }; =20 -static int __maybe_unused gve_ptp_init(struct gve_priv *priv) +static int gve_ptp_init(struct gve_priv *priv) { struct gve_ptp *ptp; int err; @@ -44,7 +83,29 @@ static int __maybe_unused gve_ptp_init(struct gve_priv *= priv) return err; } =20 -static void __maybe_unused gve_ptp_release(struct gve_priv *priv) +int gve_init_clock(struct gve_priv *priv) +{ + int err; + + err =3D gve_ptp_init(priv); + if (err) + return err; + + priv->nic_ts_report =3D + dma_alloc_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + &priv->nic_ts_report_bus, + GFP_KERNEL); + if (!priv->nic_ts_report) { + dev_err(&priv->pdev->dev, "%s dma alloc error\n", __func__); + return -ENOMEM; + } + + ptp_schedule_worker(priv->ptp->clock, 0); + return 0; +} + +static void gve_ptp_release(struct gve_priv *priv) { struct gve_ptp *ptp =3D priv->ptp; =20 @@ -57,3 +118,15 @@ static void __maybe_unused gve_ptp_release(struct gve_p= riv *priv) kfree(ptp); priv->ptp =3D NULL; } + +void gve_teardown_clock(struct gve_priv *priv) +{ + gve_ptp_release(priv); + + if (priv->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; + } +} --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 95E672D29DE for ; Thu, 22 May 2025 23:57:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958273; cv=none; b=J2R/KcxwxYYqPe0YvUc19VSYKBTsIXi8Hr3sw/1YVpC11OE65h2NjwvvcVIP+uG6qtjOftV6xfZo3bNpQK0VwNl0UERI2qmba3O36ksfdnGFckZYIfbOpZIqzz7Xfq3rByO+rtcwaCqg/Em+jryecjfkzO4oaxO2QnR/hVor0JE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958273; c=relaxed/simple; bh=KsU85/LVK/RVxvxFqeEmiH8e3CRbB9hHdYDVZaU9NXQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=c0T3PjOU70nvFbTblvUXQIGbr4iH405yFioI/uqGBo5YUZihaZ0E2sGBiVZc/n21BBzYl485FWzNLVk+kQ7+0+LQMrBXMUT/1LP2qq9Fh0QK7TBk4+Kve75LmCcXJ0qsirxDoG5TzpmgS1DkovVBOXdJhh5rTmSIBJarGXiZJCg= 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=waae8oH/; arc=none smtp.client-ip=209.85.210.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--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="waae8oH/" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7429f7f9ee3so6104932b3a.2 for ; Thu, 22 May 2025 16:57:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958270; x=1748563070; 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=/U4F4F2baZjVLSiJ5F9H7XP7MI6hq4zoM+YfBft1UC4=; b=waae8oH/sCJjko+/EAqIpvri4iQvuZZJHxZakfRhb2zERy58+9rQ1i6u92OAZJqoPE BkFMVWxTIKiy89XiDW5P8okf2oPOYj429a9hH2j38FH8BiovDqsxbw3tdNMHK2HN1hKp 7Lrs1Vxwk/yEguYF5hIKuDYUDB/XSGubxlvSnklm/wvy1oXxx1ddYR9Gm4gLJnheypBa 07L9LGFqdvEyj6nXl5AfC+2O08O4vZsm630eM52Ja/NjnIDSCIC2tzz1vXU+GpVH/APT skw8XEs6+cTKjn7XOHR3DLbw90YdElNFTjOYgtXswR94Z5iBH1TTVgZMOcyL6hf2Qq5L YPiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958270; x=1748563070; 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=/U4F4F2baZjVLSiJ5F9H7XP7MI6hq4zoM+YfBft1UC4=; b=C0SrNGxULXNOsHeIaBvCOdHZqShHWuw0ezS8kEJEXSAeXYmTC+oDNWgYtkvP06CEo1 BfK2PF/tKR9wKIHVWrTDsU4vXr87Y3EXHggXm0Hc8+XeGPng9L7uY1BpARKhWysdQxbR kr5YnRZ25flBbZWqqvbsHpU+Aolb/Yt5PtB6dGNVelyhYCvdmRPWOflRnXdb2rXV0mEt d3zaeAbtebnO4wZoTYpC/pAXj6ocBI9j3hG1R0rfivR2j9lib33rvjW/VVZ3EdVLCpEA QZE1n2agt7DWAlMcsKU6DSTQ1nrd27jhlwk3NLiT4Lo4mZbl9o9ApFdi6Mi/3d/NE5gB 0OpQ== X-Forwarded-Encrypted: i=1; AJvYcCXBbeUXrr27HFi/vdbtWDNPneMd23T4rKZEOUz5CnyR1gDj2R35gWIWLyJSFMUUJqJ4c4lXx5ryCfRny9I=@vger.kernel.org X-Gm-Message-State: AOJu0YyDkniop5srXBoYdL9B6neKNwlqvjo+Y33GLps/NvjffoTznwbn VgY3t5+L4T/6DrHfyyhW3o8BK6tlF/svZVk6teywycsjAYmfaS018HWh3Vr8h1ScVBn+NtQgoPM Ge8Q6tnffKbCW54NWv+MnybFsnQ== X-Google-Smtp-Source: AGHT+IEJdalaKRNSP2s4lpQ4yBO8ShRBy3a/J7ixPVGUEG0s+ijq9EKgywPOSNxjqQNTcKp5dNY+vqa+ntvXZiBf0A== X-Received: from pfux21.prod.google.com ([2002:a05:6a00:bd5:b0:740:b53a:e67f]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:a18:b0:740:afda:a742 with SMTP id d2e1a72fcca58-745ed7763dbmr1443151b3a.0.1747958269860; Thu, 22 May 2025 16:57:49 -0700 (PDT) Date: Thu, 22 May 2025 23:57:35 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-7-hramamurthy@google.com> Subject: [PATCH net-next v3 6/8] gve: Add rx hardware timestamp expansion From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Allow the rx path to recover the high 32 bits of the full 64 bit rx timestamp. Use the low 32 bits of the last synced nic time and the 32 bits of the timestamp provided in the rx descriptor to generate a difference, which is then applied to the last synced nic time to reconstruct the complete 64-bit timestamp. This scheme remains accurate as long as no more than ~2 seconds have passed between the last read of the nic clock and the timestamping application of the received packet. Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- Changes in v3: - Change the last_read to be u64 (Vadim Fedorenko) Changes in v2: - Add the missing READ_ONCE (Joe Damato) --- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index dcb0545baa50..9aadf8435f8b 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -437,6 +437,29 @@ static void gve_rx_skb_hash(struct sk_buff *skb, skb_set_hash(skb, le32_to_cpu(compl_desc->hash), hash_type); } =20 +/* Expand the hardware timestamp to the full 64 bits of width, and add it = to the + * skb. + * + * This algorithm works by using the passed hardware timestamp to generate= a + * diff relative to the last read of the nic clock. This diff can be posit= ive or + * negative, as it is possible that we have read the clock more recently t= han + * the hardware has received this packet. To detect this, we use the high = bit of + * the diff, and assume that the read is more recent if the high bit is se= t. In + * this case we invert the process. + * + * 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 __maybe_unused gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32= hwts) +{ + 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); +} + static void gve_rx_free_skb(struct napi_struct *napi, struct gve_rx_ring *= rx) { if (!rx->ctx.skb_head) --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 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 F29A72D3A8C for ; Thu, 22 May 2025 23:57:51 +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=1747958273; cv=none; b=B6QSlY+2RUwe1rcZe5ZoKtfMOx/dD94+90kqI4q2wcHLKYvzAENnnXgHCIxEKdWSnRtEW0Cwv+hStaheIiRlRncqYA5VcOn1Yup+EKo+AXMLo9iO4rWdf2W1+jJtWLVXG7cCKIkoIg78gb61Yk17lvOtcN03gcDTzCEUO17ObH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958273; c=relaxed/simple; bh=yBhOfv7eu2/XqSrNXehEo+4lpPVO30A19mzFnjwsSpY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=d/Z23jkYUQW85/Dqxrq4L9oBM4S3FpQUz0IhzbZ+vmRaZwd2XTJOKsUVgBf+3kxnhfXfWNpHsypJlE4GyJMGTFZjiLL2J3wkjy0I8YlXy8kH37Rb+T6w3UiEXuKedUMEamlO6ZZ2tb7Ql6xQ/20vP9+Lz5m6dZYcNIUavb7NViU= 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=sU6U1C0I; 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--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="sU6U1C0I" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-310c5c2c38cso1496623a91.1 for ; Thu, 22 May 2025 16:57:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958271; x=1748563071; 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=uEHW4PYDNmFipk6wLuYuCvPhqaUjcYJlMloM7o1AYLs=; b=sU6U1C0IBPppYtD4pRzZrKWdWlrnOsDxyvxE2nP48TcQN9y5rgcqAgW5p/02p5S9VD vCtFerTXRQL5geJ2X5iNf3xjV69SLQwpvk/yWiwRaLiCbY/1nkRe4RxXVeh0MxG9OZ0I +Y5JFseh3xHzuHyvSmtrP57EcXIA+6Us/YThgJdACyet5NvmjwRRJL2Bkdse2Bb/8wNf rs+OQHlLgEFDGDfr3pi+6LApEi+TyAvhfBYh7pUBBcMhayITiyNStRvGFj9v6yYo+Ozs OzYqB+ZBkJe0aU1EVZkhhT2Nowpxhv1WBsMNxm++o9HwDBM5ggBi8IeenCDlkx267WW1 YKBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958271; x=1748563071; 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=uEHW4PYDNmFipk6wLuYuCvPhqaUjcYJlMloM7o1AYLs=; b=CUlAgCj8wDDDB4FkEy0ORn35pM+AQqPPbHuoVa+zN5OJb4D4Gj3v8i+Is61ZDNih/H TWMwL4AetHe6cWDwtrmxC+tUX0gqLhOMGr72f/iNJMkjwkZLfbjicMWN2a28ZfhNO9b9 N0wBvAUJrkAmrvdzwTLFaF+LDJZox87FfhZn2Jq2q2frBgzpvb36K62J3kse0YniMaIO CNZYbJCoJnwUt3oX1VwA1kro1lgmEpjYDy6ekccRptn0McwqECJq1NJG0PSXiQ+rE88m JrphRmmwxwcgZ84yEvtEkg2vgBJIbrsuGPriLz3GrzKWmWiP+dBSBUBha3r7SK+j8d6a /U7A== X-Forwarded-Encrypted: i=1; AJvYcCXBvc6uXzGviMAzJL6wHcTABgaD7XT9OhFLc/Y1bPnAeN+JFdaZdtB+NhmfGSqp8VrrK+s2UpSjww33w3s=@vger.kernel.org X-Gm-Message-State: AOJu0Yzfzd3ZlHNTlLZ73z+NGx0Lfgl1AE+OwAValMjtkDIqxtdepG+l hL51FsjbI/PDbj2rmoh/kIsbYNorMAPVnSFQREQRmy7aTq2hwRE7D4GbigHEDyy42fCSpuoCfw7 BDEIx5sW1GJLYUI89rtS4u+d9qg== X-Google-Smtp-Source: AGHT+IFN1tFabWhABotg5f5D5MqfR1osrSXCCv6rzoIhra/MHMAM9QSreyv/qqkqk3+zrQwoF0BdaOHkErrCls8YWQ== X-Received: from pjj13.prod.google.com ([2002:a17:90b:554d:b0:2fc:11a0:c549]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4acf:b0:2ee:aa28:79aa with SMTP id 98e67ed59e1d1-30e830c772dmr35441433a91.6.1747958271209; Thu, 22 May 2025 16:57:51 -0700 (PDT) Date: Thu, 22 May 2025 23:57:36 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-8-hramamurthy@google.com> Subject: [PATCH net-next v3 7/8] gve: Implement ndo_hwtstamp_get/set for RX timestamping From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Implement ndo_hwtstamp_get/set to enable hardware RX timestamping, providing support for SIOC[SG]HWTSTAMP IOCTLs. Included with this support is the small change necessary to read the rx timestamp out of the rx descriptor, now that timestamps start being enabled. The gve clock is only used for hardware timestamps, so started when timestamps are requested and stopped when not needed. This version only supports RX hardware timestamping with the rx filter HWTSTAMP_FILTER_ALL. If the user attempts to configure a more restrictive filter, the filter will be set to HWTSTAMP_FILTER_ALL in the returned structure. Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- Changes in v3: - Update the title and commit message to show it's adding support for ndo functions instead of ioctls (Jakub Kicinski) - Utilize extack for error logging instead of dev_err (Jakub Kicinski) --- drivers/net/ethernet/google/gve/gve.h | 2 + .../net/ethernet/google/gve/gve_desc_dqo.h | 3 +- drivers/net/ethernet/google/gve/gve_main.c | 47 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_rx_dqo.c | 5 +- 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 97054b272e40..a812612c52ba 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -882,6 +883,7 @@ struct gve_priv { /* True if the device supports reading the nic clock */ bool nic_timestamp_supported; struct gve_ptp *ptp; + struct kernel_hwtstamp_config ts_config; struct gve_nic_ts_report *nic_ts_report; dma_addr_t nic_ts_report_bus; u64 last_sync_nic_counter; /* Clock counter from last NIC TS report */ diff --git a/drivers/net/ethernet/google/gve/gve_desc_dqo.h b/drivers/net/e= thernet/google/gve/gve_desc_dqo.h index f79cd0591110..d17da841b5a0 100644 --- a/drivers/net/ethernet/google/gve/gve_desc_dqo.h +++ b/drivers/net/ethernet/google/gve/gve_desc_dqo.h @@ -247,7 +247,8 @@ struct gve_rx_compl_desc_dqo { }; __le32 hash; __le32 reserved6; - __le64 reserved7; + __le32 reserved7; + __le32 ts; /* timestamp in nanosecs */ } __packed; =20 static_assert(sizeof(struct gve_rx_compl_desc_dqo) =3D=3D 32); diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index e1ffbd561fac..853e236f024a 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -721,6 +721,7 @@ static void gve_teardown_device_resources(struct gve_pr= iv *priv) gve_free_counter_array(priv); gve_free_notify_blocks(priv); gve_free_stats_report(priv); + gve_teardown_clock(priv); gve_clear_device_resources_ok(priv); } =20 @@ -2041,6 +2042,47 @@ static int gve_set_features(struct net_device *netde= v, return err; } =20 +static int gve_get_ts_config(struct net_device *dev, + struct kernel_hwtstamp_config *kernel_config) +{ + struct gve_priv *priv =3D netdev_priv(dev); + + *kernel_config =3D priv->ts_config; + return 0; +} + +static int gve_set_ts_config(struct net_device *dev, + struct kernel_hwtstamp_config *kernel_config, + struct netlink_ext_ack *extack) +{ + struct gve_priv *priv =3D netdev_priv(dev); + int err; + + if (kernel_config->tx_type !=3D HWTSTAMP_TX_OFF) { + NL_SET_ERR_MSG_MOD(extack, "TX timestamping is not supported"); + return -ERANGE; + } + + if (kernel_config->rx_filter !=3D HWTSTAMP_FILTER_NONE) { + kernel_config->rx_filter =3D HWTSTAMP_FILTER_ALL; + if (!priv->nic_ts_report) { + err =3D gve_init_clock(priv); + if (err) { + NL_SET_ERR_MSG_MOD(extack, + "Failed to initialize GVE clock"); + kernel_config->rx_filter =3D HWTSTAMP_FILTER_NONE; + return err; + } + } + } else { + gve_teardown_clock(priv); + } + + priv->ts_config.rx_filter =3D kernel_config->rx_filter; + + return 0; +} + static const struct net_device_ops gve_netdev_ops =3D { .ndo_start_xmit =3D gve_start_xmit, .ndo_features_check =3D gve_features_check, @@ -2052,6 +2094,8 @@ static const struct net_device_ops gve_netdev_ops =3D= { .ndo_bpf =3D gve_xdp, .ndo_xdp_xmit =3D gve_xdp_xmit, .ndo_xsk_wakeup =3D gve_xsk_wakeup, + .ndo_hwtstamp_get =3D gve_get_ts_config, + .ndo_hwtstamp_set =3D gve_set_ts_config, }; =20 static void gve_handle_status(struct gve_priv *priv, u32 status) @@ -2271,6 +2315,9 @@ static int gve_init_priv(struct gve_priv *priv, bool = skip_describe_device) priv->rx_coalesce_usecs =3D GVE_RX_IRQ_RATELIMIT_US_DQO; } =20 + priv->ts_config.tx_type =3D HWTSTAMP_TX_OFF; + priv->ts_config.rx_filter =3D HWTSTAMP_FILTER_NONE; + setup_device: gve_set_netdev_xdp_features(priv); err =3D gve_setup_device_resources(priv); diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index 9aadf8435f8b..0be41a0cdd15 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -450,7 +450,7 @@ 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 __maybe_unused gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32= hwts) +static void gve_rx_skb_hwtstamp(struct gve_rx_ring *rx, u32 hwts) { u64 last_read =3D READ_ONCE(rx->gve->last_sync_nic_counter); struct sk_buff *skb =3D rx->ctx.skb_head; @@ -790,6 +790,9 @@ static int gve_rx_complete_skb(struct gve_rx_ring *rx, = struct napi_struct *napi, if (feat & NETIF_F_RXCSUM) 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)); + /* RSC packets must set gso_size otherwise the TCP stack will complain * that packets are larger than MTU. */ --=20 2.49.0.1143.g0be31eac6b-goog From nobody Fri Dec 19 20:17:14 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 ADC8C2D3A9E for ; Thu, 22 May 2025 23:57:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958275; cv=none; b=LOBWo/kTIR/dXq1eoEuxHUMD/DuX2oQivPmqHY0f/C4ZvnJtav9QZsw7PBNZG4Hq2Gxa0PDtv/8TLDUewRDSPi9iDK1t/FetDp5ntoLLwR9w6jtodKwZ8nZhY/yt0Il3EDVR1zsBja/vBp/F1mfyS8au7Sqxdc54Ub3nGzaU2QM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747958275; c=relaxed/simple; bh=n7plbbr3BamoK04MEHPsC9Ph7jXzjScsO/2sdM4WRGo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=R9yYtjL7Y30oH5OHdx4Zy7c3xtV95MdwDMg+E45+iC9G7snJzgXz+hbhCsdS6Ij5sm1yt/RH8J2z1u6Rqcqf6IL6IpxHMUhPx6dePNWECDCEDZipfdM01bLkCO2Rc4Pd6glYSoLqnNu7XoTPTTAqTjTWciL2ZACzM/stMNDh8Sg= 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=U9q1bbPT; arc=none smtp.client-ip=209.85.210.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--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="U9q1bbPT" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-742b6705a52so8684516b3a.1 for ; Thu, 22 May 2025 16:57:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747958273; x=1748563073; 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=3/VPvTyzliorplqyqZgQq6p842HQ3UDgPCj4kwriHPY=; b=U9q1bbPTGydBLtdPmYrMbXhZk7UVEaIDz9tyJvJzUjvSzS1B48hmf5txEEoFmxWFIb as+zcIzZqqnuURF8lRbQmPH0ucMnbvyX//pjlH/S6JZnQJjnwNhLBiJCAX3e5/I1Iz2y B1gkUBt2zw/6yfjjz0Vu0stYP3V614SYe2Wrvg4vMFWGtQ3U44qbqYPZDBgrZ6hp/wdA 23NqinWoIITfGzqJsaSf/Gs75QGjqPbxonRHrboTTY7cVJTPh20ybK5isRfTt8wkeHR9 Ah4Yz/bumil6oGy8LNhF+gO643lYa3cnd9eumIbw/CFfPobRIoWxvZ/fyJxLlx9Tpkrb nbHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747958273; x=1748563073; 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=3/VPvTyzliorplqyqZgQq6p842HQ3UDgPCj4kwriHPY=; b=uOEjnVvpCdA3mjAwUcAmY1i+IkVRciOUxq1Ajb01jbcz71zpojze0ck/ZHXWraZxVL IX+XmRrzajs6Rvu1a5RembQFynicdxn2Gc4oVbBaRz6j4Rz79RZ15hG9bRxuR1ixE48+ h9yoH7Dd39rES4U0+hASeO1ZteuyF8koEIPaeDHnHe0SF/Nbok9ZT2LaB/ZkxJ00MS3p JeeI8MhSp31H0FOTxAqWzOl+BBsNtIHVaHggUBnZ2oZH2RlDUk0gzQ5NU1A1z9yy2QCg mHAUyT6p+iywx5Xs7wQQ647SA1XtIc0C4nyEMsqD8K2xhxVUkTLTTmmAisXG0l21P3eD zCdA== X-Forwarded-Encrypted: i=1; AJvYcCU+5EU4nOSNUfoP4Znvw7tCnh5eyVQQRlYsogRP3J9M5v5BUdyymDRWePluDTUEfdeocuuBMKw+GHWBITA=@vger.kernel.org X-Gm-Message-State: AOJu0YxPbsSxgP8vR324jEbhMZe14Vr/w8k7hjVT7vPuPeXzmlldhIWt tJkpNODml0zPc93Ii5alkhe0zp2vbY8HLC1IESdqUM+7OTu6545qDyWgIVp7v5RHGKiHwkM+R1I qwwHC6n3WtTOzwlYlGUMHZPAvMw== X-Google-Smtp-Source: AGHT+IGRbiFjtwSUPW8s7GKRtSvt9yqUiRl0Vl8/e3DcdCtRazY1SO6dT+VmE+wGSTd34cWUBb/TsuUBtxHTV2eMzA== X-Received: from pfhm3.prod.google.com ([2002:a62:f203:0:b0:736:3e92:66d7]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:391a:b0:740:a879:4f7b with SMTP id d2e1a72fcca58-742acd5115amr35613613b3a.18.1747958272916; Thu, 22 May 2025 16:57:52 -0700 (PDT) Date: Thu, 22 May 2025 23:57:37 +0000 In-Reply-To: <20250522235737.1925605-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250522235737.1925605-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1151.ga128411c76-goog Message-ID: <20250522235737.1925605-9-hramamurthy@google.com> Subject: [PATCH net-next v3 8/8] gve: Advertise support for rx hardware timestamping From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Expand the get_ts_info ethtool handler with the new gve_get_ts_info which advertises support for rx hardware timestamping. With this patch, the driver now fully supports rx hardware timestamping. Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_ethtool.c | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/et= hernet/google/gve/gve_ethtool.c index d0628e25a82d..043d1959fb9d 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -929,6 +929,24 @@ static int gve_set_rxfh(struct net_device *netdev, str= uct ethtool_rxfh_param *rx return 0; } =20 +static int gve_get_ts_info(struct net_device *netdev, + struct kernel_ethtool_ts_info *info) +{ + struct gve_priv *priv =3D netdev_priv(netdev); + + ethtool_op_get_ts_info(netdev, info); + + if (priv->nic_timestamp_supported) { + info->so_timestamping |=3D SOF_TIMESTAMPING_RX_HARDWARE | + SOF_TIMESTAMPING_RAW_HARDWARE; + + info->rx_filters |=3D BIT(HWTSTAMP_FILTER_NONE) | + BIT(HWTSTAMP_FILTER_ALL); + } + + return 0; +} + const struct ethtool_ops gve_ethtool_ops =3D { .supported_coalesce_params =3D ETHTOOL_COALESCE_USECS, .supported_ring_params =3D ETHTOOL_RING_USE_TCP_DATA_SPLIT, @@ -957,5 +975,5 @@ const struct ethtool_ops gve_ethtool_ops =3D { .get_priv_flags =3D gve_get_priv_flags, .set_priv_flags =3D gve_set_priv_flags, .get_link_ksettings =3D gve_get_link_ksettings, - .get_ts_info =3D ethtool_op_get_ts_info, + .get_ts_info =3D gve_get_ts_info, }; --=20 2.49.0.1143.g0be31eac6b-goog