From nobody Fri Oct 10 09:22:15 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A333317D7 for ; Sat, 14 Jun 2025 00:08:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859682; cv=none; b=NGk2EHECndiboaapYZVagiK4HrBKUu5qINykORS8ybgGA+cZtKpXUV/U7YKGvyWtX9NUDL1PKHTAhEb6xeO+Z89cJa47QWWCwLye2xOg1mP2smmezyLRfdaVQo8BBW14B8G7mSHi7v2UfLKz1bjGg6w02QYhpKh2CYj6S2pjcoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859682; c=relaxed/simple; bh=P+r33BM95lXvy3aHPCffH0ckZbdssMqAaDe419PJDcA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kI9/ehwjsPU6f0k+7N9mnrTDZPQxiQni6EL9LROWaOpuXwxAK20yohDeF78M0kG+5AgJOSrWX7c9TnFooFVQ0TKAkf3vKPfb9q2XCibvDKHsdplUczJa/CikZ+T/6dhnzq3iqodRleoUe68hnBsb8uhTER37D60OSV1ifqGx5LM= 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=lMLRXheB; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="lMLRXheB" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b2eb60594e8so1649031a12.1 for ; Fri, 13 Jun 2025 17:08:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859680; x=1750464480; 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=Pn8hjzPb35igu4zEY7kLsSMXrtnd3322tmgcv2Zk8OA=; b=lMLRXheB1/Tj6mL80FEVkmr0VHTX7ZIsNmqXmidf/t7bZBCkm/PhcIrvIomnWr+oPy y6iOlvaCs2uXcWBZdkQuo9KUHwmpkirKvFBfsnSEt5XHSO7glQ1ISBJzQfrQEj6TgWKj lo3CQwDFqHplNFlI8A1TxdTUgyBLELwti/uSMFsuyWSbxQnO0492ELL2t+vXie7KnLF3 HDh4F4GC4T1KSaA4D86pYuya2BRrdqqO0rViDHSqfD+MQD/XaRjPY5Nx2RnxIf7mZoHW 63AtN8nP+gBwFvOKYbBx8kL7UYfuUhhwE/SDC3vDj2t7V3axOX8/H9t9kYiCc4dfE+5w D3GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859680; x=1750464480; 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=Pn8hjzPb35igu4zEY7kLsSMXrtnd3322tmgcv2Zk8OA=; b=XJzwLpokKgGEfqWq21IFUF24Fp4fCREXCEfZ2NAtME4t7yu8l6TOu1E6FcUQOGmxk6 KqMi/Ck4vdHfo9LGVkXBrFitsbO1/Pi6tYZ8/YfQvUesUVlvIQB8XEdhEGZPergNe/AZ hRZ0jnkKe1ab4SJyOC4jewQAR9IariDL/Ydp9eRHAClx+NkPKbM3eHPWvpwzWNqddg6a zuaK+PhXKaj3PV+m6ELOn1fxDmK53VFvc99lggr+svFaTps2f33GScyTYcx++j3549eh lhbo17OqhC1b0uqXO3g7eR44F2ZTAYhG8fcOMS6avLyen+rPiSZ6qa9zeCeQFlzq0NDZ RoFg== X-Forwarded-Encrypted: i=1; AJvYcCUyE6uBUsuuVCQ62JduZTfub/13BZz/1Hbxkg2pKeEb5EUhCCGrQg7lQMfNt47Eyo/MvyUDcxldVY8FlZ8=@vger.kernel.org X-Gm-Message-State: AOJu0Yybb38Xzs2C/47A2JTKsw7JyR5zZdDcyUSd/T9PKEUykOwgmFYK dJfoaA1AeMNNSAK1TBw9qtRTqvm5YA16yl4Ndd3l52P+szXUph43bjYhivMvpw4cBnaIMklqgMC /5JHBeHUF04prpmvnqOE9vymhrw== X-Google-Smtp-Source: AGHT+IFPPqwo/ib/6iHhdFQpnYOxYX553xbEvMX3+/syUaWiG6Qt1e1ANWxkF+7vthtX/z2qDuwLmDKfPWjXPA9Lsg== X-Received: from pjbhl8.prod.google.com ([2002:a17:90b:1348:b0:2fc:e37d:85dc]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:55d0:b0:311:e731:523a with SMTP id 98e67ed59e1d1-313f1c02fe1mr2411816a91.11.1749859679948; Fri, 13 Jun 2025 17:07:59 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:47 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-2-hramamurthy@google.com> Subject: [PATCH net-next v5 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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 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 5B6668F5A for ; Sat, 14 Jun 2025 00:08:03 +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=1749859685; cv=none; b=Ta8y/nQeH3Kuio+Eun8lR9X9zzSw/evqDdQemvXdcyccFPV6m99f9G1txTCGw+gb0jcJuNquyb3Je/APhNAYBQKIkkCSApGH7yrO3kgxj5pyLcPAzRo9JMryf/f0Q843fOiHamQBbweAhtCiAlJo0D7SXQvD0XZn4dcE6TZhUy8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859685; c=relaxed/simple; bh=XIJIUaDJgPSbCeOnMVn1vrfeqwODaajknW8FUVvJoNc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hHHEqr3y1sjbvKIgveu2v25y8PAio1/c7jV6j4kbzikPbpyrHdpeZXWcw2NXFxokeJ5yqO31XEyz5CcV0nRiwsh7IlIN+rWu0FZJ9penb0S+P5SSE6vTbVIceeSPLaripQsKhh3/1KZ9TbxULwNxh8D+QcdX8hU/PUBCdZaII/g= 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=Z5u0oStq; 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="Z5u0oStq" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-74834bc5d37so3760938b3a.0 for ; Fri, 13 Jun 2025 17:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859683; x=1750464483; 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=VBPRpnc2h4x7Im3EOyFPjzyzqimwB1+8048ZYxeRcjo=; b=Z5u0oStqQFsqztHdYSRHi6oIOtw+neyYO8zW+ZjK2zHRm1FQ+QFBl16C8br2Dc35wI xA+I2ybPoqDWpseUQ9vGtG3DxL1KMItoSND12jmEPZWxrM2OdkpjjxoLsQqqnLm3PKiu 9XIzKHJfU0Gg9C4zo2oXnMuFHZ5Htl8V1zZ31Fv89dWf1/8namAdkrjvh76JDKOHYlcu uey6zrXUXBPdKzFdXPDcaD/o1tcNz0MhX93DG61P18nPaYngnA9SzjlPrWX6yMCLnJK/ 7K9rGh8VlIUBmH8C5gpDsXyVY+XTIJQeLBjf6l1kZoJnum2JaGQhHkRiydTZLRZBL1uC t2Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859683; x=1750464483; 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=VBPRpnc2h4x7Im3EOyFPjzyzqimwB1+8048ZYxeRcjo=; b=lZnQouQblXvJxfimxSiVywu7jGX4hxlK31cF9a5Q9hht4rIIYR2Klqk0EDf80JTUTQ z747Ygo77AZunvslNoHlCG+hUIY5PZdnW1j7LQtnjzClA6jd0vAmrPO37IVEDhtjdr/f KzNfNy18beF03miU1K6VJ/fAVIPh6K5X+As15AV6HiT54ehaTVXil7Q06Q4TlKCZtI97 QQXtktMQvcwk6+l7P+EZfeR3mK8hGCJ2L1sCDm89E58aERibW35B2tMAqUHXy/7JOctw jjFTMXKOXYU4h4OjDH6HavP+Pbn8b5lI/lGYhVefNiE9Zis6kSEucjWD5n64F0jn0e/9 hy8w== X-Forwarded-Encrypted: i=1; AJvYcCXlSwBfa8n/9QiKsfPsJ8ENnUyVoUgcIsr6u2dTHGA0EgaXf5c3Liwno9MQsoOANxfxtqjgcT9Y4X7v7js=@vger.kernel.org X-Gm-Message-State: AOJu0YwdMUY/iBaVkZBXcq+wbkkHa02IsXKypIYximRzL3Tk6Pk6Ksih wsDayNcSTHHgBVlXnOBmGxDNwm6C7ADGdr+WN//cCRRhRle68+PcbO18t9VHFHP+t6Oe6pts2f2 6me5/xbWC6w9p43ILtwKbDyMKPg== X-Google-Smtp-Source: AGHT+IF06pXPX9ePngFqLO6uSZaAh/zowL719POVkd57+2cgGQLCP9hIZbWoJ1b3zIPzNVJK3mOKKd/HFbtS6tptMw== X-Received: from pfkq15.prod.google.com ([2002:a05:6a00:84f:b0:748:55b9:ffbe]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:cca:b0:732:a24:7354 with SMTP id d2e1a72fcca58-7489cdff4c0mr1644678b3a.4.1749859682529; Fri, 13 Jun 2025 17:08:02 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:48 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-3-hramamurthy@google.com> Subject: [PATCH net-next v5 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 --- Changes in v4: - add two more reserved fields in gve_nic_ts_report, anticipating upcoming use, to align size expectations with the device from the start (team internal review, Shachar Raindel) --- 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 | 19 ++++++++++++++++++ drivers/net/ethernet/google/gve/gve_ethtool.c | 3 ++- 4 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 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..f9f19e135790 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,21 @@ 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; + __be64 reserved3; + __be64 reserved4; +}; + struct stats { __be32 stat_name; __be32 queue_id; @@ -594,6 +610,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 +650,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 a6d0089ecd7b..6ecbcee4ec13 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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 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 948DBDDC5 for ; Sat, 14 Jun 2025 00:08:04 +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=1749859686; cv=none; b=SqiZ5VDPbK/0yh3aWT2Ts3+4goiUBTUb7yhBaplADIPi4XOD7sW69VH0aaFP4PznV9d2xIeJ1331Yoi0ewh/Z3u355J5xhtJ4RwOuOXGqKxv1+uc8tQQAQtRYrkrq1OfTx6KsgGm+k+qEOn9YmCaGqBJuySYkqqAOtz4ldBYeqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859686; c=relaxed/simple; bh=pLjhrObaR9N0zjGFgr3k9jRR+RC6X8HEOHYtL4ee1aI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N1QoRYNbjBwEJvi4is61Q5dWNAjqE3tRJuxe/UVNi4ZP97nywknf8HAIHTzQU1hlo6xwYO8hw1WwSrTVUY4v1dXYvulFug96ed/akwLncowj+Di1ljD1D9Caves3Frfm4K1oVIEq1mz33NOj7D9wGYQNNSF8whSaXtkTlocK88g= 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=W7IgJHXB; 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="W7IgJHXB" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7394772635dso1970636b3a.0 for ; Fri, 13 Jun 2025 17:08:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859684; x=1750464484; 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=4bRKwXapV/LkqDR7teX/V+SUCZ5y1LxKBwjeCDLqPcA=; b=W7IgJHXBner2fIPKteCh1iCDEg1YmEYZUDdPL6w73jd/1sBl73iKnspFiIT76VXgRf 8SQ/WSLWUQ1UpdTsb+qWraPnu61YeE0SCdTIPVllkeWFKjHSmyThRYv78G8xAbJhziOH HOjAfdEPd05pL0hG0mSovtSiV12tnw2oUpWwBoGo8hCMyS/kD5hVGB8pN6cRVwsQ8pAY q1XT6x3xlY9nCeAIZQ0LFMS2Skyyz0tSMbPeyQ9MOGdEI27yTsCiM+MNZx1epVkg934E gBd8Myo7iS3bb7RiGeNNH9geVfBZNXEliKWs1b9/jqC4hXpQ7Z1v4RY0G5vgdGPFSiaQ cx7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859684; x=1750464484; 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=4bRKwXapV/LkqDR7teX/V+SUCZ5y1LxKBwjeCDLqPcA=; b=U0pkRuD0OFzFPAAwegQcEfmzidfO7bA0QY0Y16OLstLXUR21g5EotZdGPbrfDXjLqe ItNGNOoPRPFxCdFEgRz6DQfSRtLOnuf2K4pCl/urxjhJT7iRd2WuD1qcgrAHCVvvAB98 p0eRljyVPQJPTCZFCwREMCXpFQ8IE66iuWfPTZ1wR57WVaHLfq3p4jnnhUbSe1jpnBb8 I+JiM68rpcGBq9jKu73EbLvdPx1tz+Y6mkDrO2KJHZ8FjxTli2wjC6jqkXtoCRNjvJf7 tQAl+p7x7rIL/GoXVDKEhJ90vIlJcYmJRqVim2A6Rej/Z/uqFG83dHOlUtdp0GDK+S+O PpcA== X-Forwarded-Encrypted: i=1; AJvYcCW1JiLZjHJCIPXM6Lo+bjWeJvWTRpSv+2vmLNxz/jnNoxq8yEsJVWOyczy7zyjDSGExu4tesgLP277oaJc=@vger.kernel.org X-Gm-Message-State: AOJu0YweJI78mpGAr5CC3nnd68IF0E/x4PV7XQIto+WyzKHP0qhT6pOB TVf2D+9vQbWdZo1+WMDUYL6PrJFJet6x019m1eC55TaH7Lp1BV1YGxk5E1P/kq55zeAZD2Xm5hY FRv80vAz911jBiTXzB5xQnLyVIA== X-Google-Smtp-Source: AGHT+IGXeHydSKv4iruMl5xRsM+87KtLEvkr7om2GpOTki55LTg7OJ8W9AG/XCgTLH1JIoB3ZwVwrCmo1mcwLO+Wmg== X-Received: from pfbgh9.prod.google.com ([2002:a05:6a00:6389:b0:747:b682:5cc0]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1142:b0:736:5f75:4a44 with SMTP id d2e1a72fcca58-7489d050d66mr1392625b3a.22.1749859683941; Fri, 13 Jun 2025 17:08:03 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:49 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-4-hramamurthy@google.com> Subject: [PATCH net-next v5 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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 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 0BD152AF19 for ; Sat, 14 Jun 2025 00:08:07 +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=1749859689; cv=none; b=Yyx39rS6Hx7cXesFSLcrM3TWc5zSJd0KR+3EmwT4zluo0V79s86M/AYd6IrX/TfvW0manoNseu/CnfiU3zKSocANOBjHlYRNWiEO0g6T16k0W8AJV4jcAyfMMOcCib0xt+1Vh2Vka3GnoIN9Fvelvz0ggCr+C0LZl5QDtHPisaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859689; c=relaxed/simple; bh=1znNIB3u16ieepj82rVPi9LAndQlC4ZRrWSXKxSRCb0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=RPp1I3KUo49mlVYpcS0eQegL3IEqi5ob/yILV/Ho7O97qnYaI/03FkyaHTQ6qpt/+03j1iK4QpEHMEB3Zij92yjEa48kAJIIC7Sj33NTcUQc/qeQQdEQrYHhT44aqBuRqpHuWdsYnjJ+ocXWKdguBOH9UIlTH5glYr9Klke9Pzc= 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=VxppQ7n+; 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="VxppQ7n+" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7489ac848f3so760400b3a.1 for ; Fri, 13 Jun 2025 17:08:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859687; x=1750464487; 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=R1odHZAHpj6iymdK8bPN6NeFlgVHA1tN8g6qXmugLMo=; b=VxppQ7n+KPojAjsyBsVdggIwzBxxEalhkoKHbwOwLopjkUqIqwACqfKKjvBhb3N48V v1H4ub3I8HrqgGiW8Cp17FsSnZh8xShMAVRq+HapSgdwnbFfOTvABMX+GtnmeE60n+kF YCVwbJgvlGFg17fI4QefhBpI/RFqwt9M4DI+0r21QVxz9olObLZAiiEcgO7tT0jaPP5C nQaUYkR4sXR2ppbko4iDskVSmnQb7MD5MdE8xK4pCVNF5U33pfyNjkEzvxRyI1fR/lkr aXRp3UGtDK28e8Y55sFIl8y8VS21P6sSEX0qNdYAtPg+LB71KKv34FfA8c4hcxZtfmO+ sItA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859687; x=1750464487; 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=R1odHZAHpj6iymdK8bPN6NeFlgVHA1tN8g6qXmugLMo=; b=EVQOimc9jhDJ1o+bqwukROiC6aBDYwT0zO12M6U6YFoBFNQLA3JxCjUdTcNPohCXQh p1xhIzJOJ8AyF1gXbJA0J7ddWgVATMD976f6i3EwNI1BV5HHPsCtQ8SAEbDoMyqHXZrZ Vtwp/+6mNxKjkgcdopHfHA3Qop0ou+7dHV7pgXdJdokzZrrOQXgdljftmVrhRfV5ZIdl XE9i8E64U5U6VspH0rJ6MWyv9Ji+8jR3/torg3mfKDeSRIZieIjmk1Sy2siLNem9YIB0 iSksehSK07NfdSu6rkCpI/sD7Jh2x38os8rdNrCGhPOHVh6/8HMrxvhQC3EIhF+b58e9 jSIw== X-Forwarded-Encrypted: i=1; AJvYcCXUx9A7PL+f/I+ie8aCV8MRd4pI9KLE0wACLOwou7JHe7M57oCZz8a7bmqYnT8sTmpe+ObwWtptAA30DhI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw37R097fczG6C6PHoWR4B7uVacdNtLo3B4qNBou4uOQzgTpQ/f CDEUh3NMOHk+I5ShoffrvQFWvq9eXpnT4JC0o9AAktfLpufcVj3PyKzxzG3wXuKQ81Iz4H8t1pi QmkUkTKLb6HZdf/inzVmdX0cMkA== X-Google-Smtp-Source: AGHT+IH7ciQkm2gQh9f6uUBhI69AkVCgzEFU2c/bchRIarpXJlTId5swmE6bncuVJaYDXMQdZ2uwdNz56xJf5gmmNA== X-Received: from pfhx39.prod.google.com ([2002:a05:6a00:18a7:b0:747:abae:78e8]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1acd:b0:740:6fa3:e429 with SMTP id d2e1a72fcca58-7489cfcb063mr1516682b3a.11.1749859687347; Fri, 13 Jun 2025 17:08:07 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:50 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-5-hramamurthy@google.com> Subject: [PATCH net-next v5 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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8AB8B8F5A for ; Sat, 14 Jun 2025 00:08:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859691; cv=none; b=RQy4nFQLcL3i2Em89xk+FrbhGFh1G8aX8xGRA/NLkj6vP9YD+uEiJh3VtRiTQizABb0GgbXCoWtVrFNCfH3x1/cC4V1j2E8Cd+TCf1/TaksQu3UX7f5nMkM/WgNJsgM5NEauVVtKDWNyy6WFX1PuLgpXiE5IGN6JkkXoO21WCwU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859691; c=relaxed/simple; bh=0eGNS+WVUNN50Z5AiPai93dnMlivgIU5IZZ4O2qFo7Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=iWZt1vu04ceHZXLrmy5AfcznPXRy9Icrl6bNAxnFE2cQw4Hg4whERJc9J1bfResaiuxTJ0j+s+plEHIaWm177GW5uL2Bit6J9pRMwXDhg61S4WIdRJl7rKCbEGAuCgMZGQUMQ+THK2e5wPvro9uXRRjbNhBN1AxtA15maoOnoiI= 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=fTPdiPzh; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fTPdiPzh" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b3183193374so165820a12.1 for ; Fri, 13 Jun 2025 17:08:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859689; x=1750464489; 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=ZGKQOvqZ0hMp+QDpneOSk7DbvBFQMDy0XsSuv6X7spE=; b=fTPdiPzhz2R2WUI4yUbB+qXWN0junA8YEMdP+K1xGf6/l3cHJE92wZJZsCQOhEX9lF UQKBcFq3afJ3loJzfAVMo1du8RIGTTIxAlia/gAMg5BmjgPq32Q9V5zQHrB6F3IZaMpu zuoC74qUjV7MHDRXaVKanUXXVx9e7HwZFmki1xgytJkoGhTCkxIYVTWIlLGSBNjBUS3S L3n3MnVDqUtw96oMoLBWT+8AhQsOIB5//DkB78Q9VNsz+TIL39rDuRaJ6vlXcUmzSF9b AIQeMBaCox48l/NUl1jiCjEeCMJASfdlIf4CycdH2iYTHXFbcSj10h1qS5Yn2gJP0OWN SEsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859689; x=1750464489; 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=ZGKQOvqZ0hMp+QDpneOSk7DbvBFQMDy0XsSuv6X7spE=; b=wBE/CY4/PV1zSDGWZXbETE8wkTB3B4RHU76LR0V0SKwsosNqrDjccUmX6fWkB7c1Ab Z2LwcaRzoUg2Zb89JDYq4tOC+bLvciJpR4prYKmB05b5I9GIkD7fescw4j+TotHhzSuT FmpHiVoQN7ZNmURxA3NmIvNqNG6wx28CKcF+Porsz63sRW7cM0Gm+58NTIHE+7sSFMOM pMyGz0YUML4Ba12xtqrRzXZvEU4sMSnIcRBNQFfkZoWt1TIC9bXZ7daYESyRjI/66Q6Y hu+u06ptbdge9xfrt9hbEDvDQSG3i2C/bNQNjIpEWVooEvYyC0/OOoH7o+ZGf1ZbOzCR wmYg== X-Forwarded-Encrypted: i=1; AJvYcCVWC7tJWssHSM9gMqp21AMmcdZXiFAjQnz6AG4Xsz7jDMdLbAOLsYq/TlUrk9zhkrG7vL26FWnfLH4F+NE=@vger.kernel.org X-Gm-Message-State: AOJu0YzbqKUAyVDBWYQMgIjIiYw1K8LZqaWQEzw+9UaultC5zY9KKOAn jxNRJ1A7W4xDpemvvRTsl7vMcMJmhR2pdtXG+b6yoibt07mWiP2OdPesBOW5pTA5ABv+5bhJEk/ fMdOZuBdkKVAJkKhBC1S7mreyTA== X-Google-Smtp-Source: AGHT+IEK16tVj5NCDJ1XkyqiOhYgV10WppbBSvcx/r1gSqLmEz4YxeEz72s6Ow1PPZWTj9XFuLo5Ez4jw2TaMeyjlg== X-Received: from pfva6.prod.google.com ([2002:a05:6a00:c86:b0:746:3244:f1e6]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:430d:b0:1f5:7cb4:b713 with SMTP id adf61e73a8af0-21fbd55995cmr1545169637.19.1749859688859; Fri, 13 Jun 2025 17:08:08 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:51 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-6-hramamurthy@google.com> Subject: [PATCH net-next v5 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 --- Changes in v5: - Change to register PTP when initializing the driver and keep it alive until destroying the driver. (Jakub Kicinski) Changes in v4: - release the ptp in the error path of gve_init_clock (Jakub Kicinski) Changes in v2: - Utilize the ptp's aux_work instead of delayed_work (Jakub Kicinski, Vadim Fedorenko) --- drivers/net/ethernet/google/gve/gve.h | 21 ++++++ drivers/net/ethernet/google/gve/gve_main.c | 7 +- drivers/net/ethernet/google/gve/gve_ptp.c | 84 +++++++++++++++++++++- 3 files changed, 109 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 8d2aa654fd4c..527e17da60bc 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,24 @@ 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_clock_nic_ts_read(struct gve_priv *priv); +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_clock_nic_ts_read(struct gve_priv *priv) +{ + return -EOPNOTSUPP; +} + +static inline int gve_init_clock(struct gve_priv *priv) +{ + return 0; +} + +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_main.c b/drivers/net/ether= net/google/gve/gve_main.c index dc35a23ec47f..bc2f36962ee8 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -619,9 +619,12 @@ static int gve_setup_device_resources(struct gve_priv = *priv) err =3D gve_alloc_counter_array(priv); if (err) goto abort_with_rss_config_cache; - err =3D gve_alloc_notify_blocks(priv); + err =3D gve_init_clock(priv); if (err) goto abort_with_counter; + err =3D gve_alloc_notify_blocks(priv); + if (err) + goto abort_with_clock; err =3D gve_alloc_stats_report(priv); if (err) goto abort_with_ntfy_blocks; @@ -674,6 +677,8 @@ static int gve_setup_device_resources(struct gve_priv *= priv) gve_free_stats_report(priv); abort_with_ntfy_blocks: gve_free_notify_blocks(priv); +abort_with_clock: + gve_teardown_clock(priv); abort_with_counter: gve_free_counter_array(priv); abort_with_rss_config_cache: diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethern= et/google/gve/gve_ptp.c index 293f8dd49afe..e96247c9d68d 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. */ +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,7 @@ static int __maybe_unused gve_ptp_init(struct gve_priv *p= riv) return err; } =20 -static void __maybe_unused gve_ptp_release(struct gve_priv *priv) +static void gve_ptp_release(struct gve_priv *priv) { struct gve_ptp *ptp =3D priv->ptp; =20 @@ -57,3 +96,44 @@ static void __maybe_unused gve_ptp_release(struct gve_pr= iv *priv) kfree(ptp); priv->ptp =3D NULL; } + +int gve_init_clock(struct gve_priv *priv) +{ + int err; + + if (!priv->nic_timestamp_supported) + return 0; + + 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__); + err =3D -ENOMEM; + goto release_ptp; + } + + return 0; + +release_ptp: + gve_ptp_release(priv); + return err; +} + +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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 E513F4315A for ; Sat, 14 Jun 2025 00:08:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859692; cv=none; b=SBtpA2lirDimECi6+yZ8+ukxiKZi6kA1VZ9xfXqh+9OR7+bdSwlQJkV/R9Aw9Z1ULhpMo3h3yXtfO8oWB9he6lJjBaXa5P639VTeM5YltIfJ57tTi3YWqVci9m6sgMU+eG9pvrOdEWNbXwpYzMeEMGm2qyv5iuzvI59jwtiy5K8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859692; c=relaxed/simple; bh=AUqZSuiBe3PPkayRXE+1vl6STB7+UaA9jA3sUFVwyeo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=sWJblNJJ2ZouyDVtCshr3JQkB1DYmDgQyCzWQbdOxHsk5LXmAmjvHu/mG9pUseoGC+NT5k+n9I3H3ksaccBBqTaN4KK0BOmBiL4no07FWK79TKdqdWje0AVhNnAWtgDU3cJyYhQ9jNaWg5FRASgr7ZlwKHE2gZQGdYFq4LB/U4g= 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=qCEd4C8/; arc=none smtp.client-ip=209.85.215.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="qCEd4C8/" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b31814efd1cso290600a12.3 for ; Fri, 13 Jun 2025 17:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859690; x=1750464490; 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=wQ77PoXoZhxHkicjW2DRoewCReIJSoD7R1A24IDLpDg=; b=qCEd4C8/2EGolwlNypZa9xDJr8wIKtEr+Z7QPrbX62lFBc5CFowAGfBH08ZhspgcBO oQt9uhFzr2h6erpB3HEANu+Hne1EKF358VLxIqZkVUxN9IQPfL9W8Z9NEoLe9eIwc03V WeQE/bRGEFSrRrdCnZXITo7CNAYAqm+IWDzhot+MPHBgwmlixsAIx3xYHjzCa7iWi82l n2ZNT4ehMN9lSefLl+6+H8N7WGgWZ0KKoQOwSnzYH2iemi6rc98jhLa06J+wBtD6lKG0 K1Ww4Ab6rQNhBBOkosIjyBRjbpdhH06RKVYZs1L6BN8NvjMTy1B/DIZK3ND4WIP3s7Sf bBTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859690; x=1750464490; 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=wQ77PoXoZhxHkicjW2DRoewCReIJSoD7R1A24IDLpDg=; b=b3avNtQwi7rA3F4+QML48qRyF0FFBQt1iRFt0jZOh/lsGF6PaFY8pdcSWPgdGv1+aA 60qTvUbbmLHHMCXU3EVINNklEqvke0JhFHnyt6uJJqDX+g9fe5OSKdfdEYq9SQBdhz0U ZmsAqwBUV5/Uwtd6Pn9yTKki8RmP91UMn/9FVEJlnEOkFlgnLiuCqPNPinBELf2S5fuS azYNnwM0NNfm1ViDU1dl6X3UXd7uYtUu5JffbCmcCDDRw5KAkygZVMk/qlb2jmt+Kn8X NwXZDmk6xrFiVgfDwN23BcU6jgwyoLNLpWDGOEbVnNoIn8g87sWQb3puV6aJ/w9ZQXYU 67eA== X-Forwarded-Encrypted: i=1; AJvYcCWL/ix+bGJBCz1P8UgMtvIi52fIevBIFbUUq/XvW8FMe2CmEbikky/vKoC08pILVl1SfKO+CtNzSVH386g=@vger.kernel.org X-Gm-Message-State: AOJu0YyycZhMEQ4ukvdnxwFgsB0CyHV1rhDMeo0eC44lCpCSDcSXIXw9 tA1P6qNSfaPp4XH0l81a3Tdl/C1EKkR9EUK2yRh7lvIzG3pe4p1JNDlknuwKI7Z/fKglUVD/kuN dCbt0kZAEjvN/Lta5yxpKaqqLjQ== X-Google-Smtp-Source: AGHT+IGpt8cTMfKUdKgjk+25Jrog2GjB0qM8UCNp6eTJcDfJyHbgtJn77pvdxSnRwYARFCY1cI+LKo5NauUFzP/O3Q== X-Received: from pfwy28.prod.google.com ([2002:a05:6a00:1c9c:b0:746:2414:11ef]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:47df:b0:21f:becf:5f4d with SMTP id adf61e73a8af0-21fbecf5f6dmr999246637.20.1749859690301; Fri, 13 Jun 2025 17:08:10 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:52 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-7-hramamurthy@google.com> Subject: [PATCH net-next v5 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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 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 E750A14A09C for ; Sat, 14 Jun 2025 00:08:14 +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=1749859696; cv=none; b=BkDjRjKKwaTlrmXYRbvWY7y+0lbFzgChzaI/J7vTLPi0XM7ghysStE4JmO3gTnFvvKIaLga9Qh0SdxuMzsjFbCUcpR0LCsrGRL7FgZaRDwljTd0u+qURfnMwlE/15BM0OpfXV8K0++Uk82HICxam2mgzwosp96TIGT5oN53HQ8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859696; c=relaxed/simple; bh=EQK3/tVjNNDYeAyjzrgQfnPzAGBy80Ah+dNcW93p/UA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=sPx4dyHq4WXUFTv3aSFEkKtvZvJFO71Rvu1MPnvMjoj6oGg9VS/HHudrVR+N5VBsXlRDW2TEunOkZ4INA4FWFSpcsnDy96ABOejxc5MWXdIkW+96bgi4gs6JlynPXWMz8FPQwc3Bmo+QGgxzJTvV0C1c2T9YDJYrDzJFREt9xLQ= 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=iOc+2UEa; 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="iOc+2UEa" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-74890390d17so1224351b3a.2 for ; Fri, 13 Jun 2025 17:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859694; x=1750464494; 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=RPr9VjvadtEs9339VHOUsV2V/j2hqIq22xXAScQhOxY=; b=iOc+2UEalydBG7ZorLuqtUlwxUBmWI8qv5gm6LHlQBoUibA6QGPXZRtl6ilnnPUoJk 5e0zI3AVKbQXG/xeLTroQ2c5cljY8WyYv8hfBemgd/wpaH0aTTpgxfSvwFywIJplaU4x 7/sce3PgjWKhoG6s8qwV+PyaakMlLMM0+vqCtC0tsfYo060DU/5F58v2RTFxfT5BpS5R AuwXoVP2ohqLmcrKT+Cw9uVIY3ulRGO06BP5Ny1NIrQdqE2VEH5eW6joYd57RvMP7zsH 1xTT3fsJhqBwYhhnvnReoYNia9kiCxawCfqfo/ZFaGpJ6xVVXWiszZ7LOh/I+OVmOzWw b1dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859694; x=1750464494; 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=RPr9VjvadtEs9339VHOUsV2V/j2hqIq22xXAScQhOxY=; b=s4VcY3DULHbWTg9DLYZYNNc5jK+0+3zfHqrZzujLzkcKGMW4sBvXxQETLWfQK8rVUZ 98cuvsUTwkc/roq5KmIxtPjihlFBzrib+DBThvAfGbP2ALnkLQED3/hSY3RvAJa89PfJ t2HsO3Obd29+qgq0ZiXWBBiZQut7H4w1VE3EDOXVNgLIuhm2Ok6qFjPcrBBmtyNZk+uM /TX83q+ir5DIBMOkPCpcINatYipX1vE1ZW20PuAGX8g817qwujdDos+ViIewdH4DA1LJ gowFr+cJ2PfYrf4Em/VlIOnY3XIJhzPcT9RKAMjv+rHsG3gtK0+XqrzvHQzbkAPh+qCH 4PXg== X-Forwarded-Encrypted: i=1; AJvYcCWe8YjjC9u+/bkVmfXW7cJV6IXlV6EFgqtNWGQVShP6+++DtETGeMM+BYUBVlY6gXw68PVl6nwta5CS8os=@vger.kernel.org X-Gm-Message-State: AOJu0YzrpS/SP7cImwa+x/gPwPWOXRTe2T/lBFbNE/xWy0z/C/YPKoWv mdoEJ4w1XCT19xgCAd6oSYyiIk43x15RKIvrRFlnuR8EtTpVXeSA7ib77wQVQY7C3h2ugkbwTpp oJ1ck5Fs5EQ4iII3YYnHSXQmXJQ== X-Google-Smtp-Source: AGHT+IFetTlh5BYHg8AgVOPUCNwrqc5YM/rhO3Ou3VJ0DriTDP2fyYKqS3lEUw7KiUyXe+48P6WtswONb8fxOViL4w== X-Received: from pfee1.prod.google.com ([2002:a05:6a00:bc81:b0:746:25af:51c4]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:244f:b0:746:2591:e531 with SMTP id d2e1a72fcca58-7489cfffc62mr1523220b3a.12.1749859694394; Fri, 13 Jun 2025 17:08:14 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:53 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-8-hramamurthy@google.com> Subject: [PATCH net-next v5 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 v5: - Utilize ptp_cancel_worker_sync instead of unregistering the PHC every time when rx timestamping is disabled. (Jakub Kicinski) - Add gve_clock_nic_ts_read before the ptp_schedule_worker to do the first refresh. (Jakub Kicinski) 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 | 46 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_rx_dqo.c | 5 +- 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 527e17da60bc..be4b5791c245 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 bc2f36962ee8..7fff1409b121 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -727,6 +727,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 @@ -2047,6 +2048,46 @@ 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); + + 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) { + if (!priv->nic_ts_report) { + NL_SET_ERR_MSG_MOD(extack, + "RX timestamping is not supported"); + kernel_config->rx_filter =3D HWTSTAMP_FILTER_NONE; + return -EOPNOTSUPP; + } + + 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); + } + + 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, @@ -2058,6 +2099,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) @@ -2277,6 +2320,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.50.0.rc1.591.g9c95f17f64-goog From nobody Fri Oct 10 09:22:15 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 787D64C6D for ; Sat, 14 Jun 2025 00:08:16 +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=1749859697; cv=none; b=EgmVmvwIUQ9oa3tvZju5Dkerk77RqOacIM8QUazTl3bTn1y4D/wmDBPntBwLN/Cv8UeffR6Nte50pOz43tEHc00LKXwclxiUGt/9sE1vXS6J37Hj6DeyXKXSxQlFmpPRRsTzd3WkInt8IjcC5su1L9crptcO9vBv8No4lO9/tM4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749859697; c=relaxed/simple; bh=i2SJsezjKdHz4pBfByEDzI7aUH+K4JDCxAJyXh6TjAU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=EIFMMYqlegNG28LoXoG5N/TM2f6kxaFpCq19hCeJgp1Iyq86bsmjFHrFJnquu9VTVf/yVp5zg/jHyENmhbnahYT5aMCuOS4wJNavHoyqR45Vms60R4cOlhfSHtp379jsb1hrntavxl2ptB4MRdJTVwrU88Ylrc9K2a9KvxOqYVI= 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=dVoOJpV1; 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="dVoOJpV1" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-74847a38e5eso1710660b3a.0 for ; Fri, 13 Jun 2025 17:08:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749859696; x=1750464496; 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=EljVQcnicnDvv/Y8OcFkMX/KVGrQBJDuCPNl1ok3h0U=; b=dVoOJpV1o/c5aTmM4Mq6F3aS5Tpv0LqpNVTtY0WstjjdUQg08Vk5bkWqEthhdJ1gBP O4yAoMGsnH6WRD9r0Y1Cum0zWLmELDfUy4ptp6Jc1KhsDrn472k8S/ufU0rILbnHRobT I5K/jGG+P6jDY81WbDOdWnEy9ozYSz9O+SmBa1i+jzVGdm/qY+rcIPY4lEsZol+0aN8w 34QWvjppXvIfOhHLdmtFIH+2X3m2doUUIu6SMFiyXtabEUzRzzI9LBZDhy4xPeil+Ru2 XBe/qTDvvRxvbVXd0IAOz/Sf86DG//qJbHsZEX2R6OYdTHy0d7cYvM1RV6EGoU6uCOn+ 9uqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749859696; x=1750464496; 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=EljVQcnicnDvv/Y8OcFkMX/KVGrQBJDuCPNl1ok3h0U=; b=XjJd+imqfwJNyZXoOd3/Hf+SPxq1076x9vxPVsYu6eEbTiVtfzyuVobDQQHRTWOtQ5 mbcxU+mq8kYZ1z7GT14dLGJza9DeBclxEqFnVi1Us7Lx9TnPtkMGljIZ5ojx0OS2kDst fuUbODEoCtnhbjtVPWIQrCx3BgGuf6i5+m/qtiXbw3cD3ioQ7y5Rn6pLHGYjxg+vKmBv jLXLg64tVzFIzJlVadXkZGO268TPHi6HTC1pvaAzDbb4R7DJB2GnW4sgIHdiybrudnRc c4TwEDWuvjbg0CsnyBRandajXaUrAB5pjOhy7VLmXglv7pOd0jZjqyu1w5X3QSxEivFC kRTQ== X-Forwarded-Encrypted: i=1; AJvYcCUVZzQm9DAug7hxuAL0xewfE6E6PMVj1rSpv12LApjW+5B/P+PBt7+lIKb4OXYvZODW7uxxohcJQGewsm4=@vger.kernel.org X-Gm-Message-State: AOJu0YyR3g74a2P6gboCI/vEBJc3umAPDo0O4erOU3Vjyi4FIDsiwxfB 7wed14NCeOAVYWfl2T/ndHk8dnuj6QmIOCA2Yo+kCq+PzJAlVBZgYTfLJvblnkl5kuEhNCPqbgg vsS7O32ryn7lF/YGwMY4gFl+85w== X-Google-Smtp-Source: AGHT+IGOv9d0N2cxkzxw1Yk+b3n0JGD4cBZckAigaeJg40gGm0MI2Gbz+6hCoB7tlaT9S+kpG8wgAlLMjDMbhztBzQ== X-Received: from pgar5.prod.google.com ([2002:a05:6a02:2e85:b0:b2c:4702:db0e]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:512:b0:1f5:51d5:9ef3 with SMTP id adf61e73a8af0-21fbd686cfemr1635658637.20.1749859695780; Fri, 13 Jun 2025 17:08:15 -0700 (PDT) Date: Sat, 14 Jun 2025 00:07:54 +0000 In-Reply-To: <20250614000754.164827-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: <20250614000754.164827-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc1.591.g9c95f17f64-goog Message-ID: <20250614000754.164827-9-hramamurthy@google.com> Subject: [PATCH net-next v5 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 --- Changes in v5: - Add the phc_index info into the gve_get_ts_info. (Jakub Kicinski) --- drivers/net/ethernet/google/gve/gve_ethtool.c | 23 ++++++++++++++++++- 1 file changed, 22 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 6ecbcee4ec13..8dbd7639e115 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -923,6 +923,27 @@ 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); + + if (priv->ptp) + info->phc_index =3D ptp_clock_index(priv->ptp->clock); + } + + 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, @@ -951,5 +972,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.50.0.rc1.591.g9c95f17f64-goog