From nobody Sat Feb 7 19:57:05 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C639B21CFEC for ; Mon, 9 Jun 2025 18:40:35 +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=1749494437; cv=none; b=MiGkfgGjqu+VU5N96IzxxVcW1vBWifOyS6wN+XyPVLZwuO2glxN7YTT4KOcC8lKBxidOq6IW/rREyfN8FP+iIOgBbfr7hgKk0TAECzU8O/i2rqTtfUQy+flKhMu0E+jvikxsuodyQgR2jkN1T6yXWyWRdjb/im6VKgmBpcWDxKY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494437; c=relaxed/simple; bh=Ueh8vB/WqWHbGwdM72Pg49M1EPCrJ+7qrjfiE0mj0/4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CTP40d0M90U3n9cE15SbrU0PE9fgLUXklJI/SlRBgBH9/gijIo1L65UPiXXUk4K35lM4psyZp3rxTL7iaaL1RDs3svyitvYFcPV7Xb6XeAOpGH/bBTjzt5R4iaS7CXh8caAhsnBC73W2mwzIxqBXNt8F5N4+JSInSc1WPvY1PbA= 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=umi4Fb2N; 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="umi4Fb2N" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7395d07a3dcso3382827b3a.3 for ; Mon, 09 Jun 2025 11:40:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494435; x=1750099235; 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=Yit01hZIFe70C+KveOVG6in64vKXs39Zm3W3QCkhZYg=; b=umi4Fb2NocF0+xPKLGFRa1L3/hNVKauBCbU8V3LNHVhggbM1sBhNQwTtk4BgW4BelD hVqXwac3lNWFuvV8hmcAdF3HLKL4fn34bdiymRrx2DAJaInKn2g0rgbAbKAsxwK0tNmr or2NHV2pK2+ptcgBdcM27tzMoHF+Wg3W7gTlvgAGO6sNX7BgPG0ikpDfgQWftHsOekBw A7nyoAdSLq7E0Sk+LDOyeVyl/P+vVxB7mqKNPot9f2CSXUs7RIiE8tiQhAdIEriWxRcu MMRV9EiN0ei/UysqW3I7RD52b7JyCbL+WtqZBiBVdwmxpnBGbcVbu98KLyZ/hIUawyn8 /Bpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494435; x=1750099235; 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=Yit01hZIFe70C+KveOVG6in64vKXs39Zm3W3QCkhZYg=; b=tiMCHE0YlvJmlnfuAoY8XNAw1csPLY3yLwYVNyOo+iiDtyi9het6AaeAqaYpSjbXcQ aXtw+2VCoSICfj7L3axRP7qFsWfmfBHh6BsymAtncM0/j37CaW/KvFUo/xaNYkYinQnU BbPo7U7uzNc9lyg4Z/sBoTPGWLDWuNsmeLQ0ndPbv+KOUyAQR5AJIbXsUQ9cU7GjtpmP jdFYCCYz8PMahyQ8cZ2wozYJHkRjvccc8njq9+Y7yUkyziN7QIdRairJAXjNRto+bfEY BGBh9Hplu2bviUkZMKLvyN7y6a4avEXGi9DV3rj9DVoqXR4eS6JmTHjC/bwP6vdEIixs 9axg== X-Forwarded-Encrypted: i=1; AJvYcCVAktFovZb8L+S9ufRfsww8TVF0Hn0XmRG6xT3hUOvZ1sjTOEPF97UgSmczJpfuVOdBPe9kFWzSqI/u4AU=@vger.kernel.org X-Gm-Message-State: AOJu0YxOm4gi1jo0zS/ZwSFvLl6Hs/SU/5LWztjRI21d+mhKeBzO+mOh Xyq0vmOFQtaW02buEB/D5xPKdouLBooJJsmKXSzPuRcFdR7OL727Vx2XD6FI3iXKWtaPV/tRDVv ZJRE82H1OOXoMgzVYEBLfZHyHTQ== X-Google-Smtp-Source: AGHT+IEOA9JlNuOSn41C3QU8UV6Vy7wjT3OlV3oug9/iq56BEMAkoOF8PupMPb34+Q90lAjshWn16IlbrhP1853hVg== X-Received: from pfbhb7.prod.google.com ([2002:a05:6a00:8587:b0:746:1a7b:a39a]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:734e:b0:21d:375a:ee33 with SMTP id adf61e73a8af0-21ee24cc09amr20565286637.9.1749494434965; Mon, 09 Jun 2025 11:40:34 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:22 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-2-hramamurthy@google.com> Subject: [PATCH net-next v4 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.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 Received: from mail-oi1-f202.google.com (mail-oi1-f202.google.com [209.85.167.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 C9D052222A0 for ; Mon, 9 Jun 2025 18:40:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494451; cv=none; b=mwLmSn0aflHhwT64o6eoOqTf7vDLJcdbPQMplFTjoDUGYSRC+gQxvlY7t1WVol/+8mTCkKk0GA0+IbpDeR2NTEiEwP1DXLf6+6TJP3hEVpWXUAKg0XZ+dpJ/bVLq3yardQ+Hq65fIgoVzGDhhdULmTiHlfxFZPEEFEk+QikFE9E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494451; c=relaxed/simple; bh=rKjUKQfc4OMKlUXFxIl6D9srGX57cWCr2GmRAt5oFXY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PCErSRLtf4XwYKu+7m5+pyNm3N0b3VJCv00ixfI8b8HGDvnCjtEEQ7OM/3gMcUrU3gMB01IpwOD/jkhevnOGb5t31aLJm6f+iYdPJXTjlV1LCDmqs0xt5MN+0lQnsLsR7npFF3zYBWkbxWSAx+B2BrYiL945I15njSdUK3blqw4= 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=wYBFK5FC; arc=none smtp.client-ip=209.85.167.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="wYBFK5FC" Received: by mail-oi1-f202.google.com with SMTP id 5614622812f47-4066a79eaddso4433424b6e.2 for ; Mon, 09 Jun 2025 11:40:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494449; x=1750099249; 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=SIFIP7KP90Ct5yuguqMb9VIz9B7n2uUQGQjuUEHD2gw=; b=wYBFK5FCkoC4VXprUPbGUAU8fQUUTNKAXznB3DMyoJy3X0ePx5y4TJcdG+Jxd6Dpby 2qx4HXk6ToMvRBkn1FqEcsT8uGAPvgQaN8S70URS1PUJVugjIe286cirtUw4YNPRbSgx EMHn/32o9I5AK/2iUReh2s90zHa29495AIA5MGZFAfyq7dwpv7lpQ8OiFy7n01MzyeXj ocwHQVBIn0ZsL1gk5bZX1qBfjfcM45uD5TZRzAM5REbbgdRSy8l+XSfzgKK2mI7avyvU l+v9+7u1uMORXKPIdmktR6RdiLNl4nfdmFUbxrPnjGLnnufy3cStI69XicfbbyWn6CIj bgaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494449; x=1750099249; 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=SIFIP7KP90Ct5yuguqMb9VIz9B7n2uUQGQjuUEHD2gw=; b=RB33hsECXJoxZLnGgmJcWSsMbQssmVM6LIttApnnfLJ14xXyB8QwL0BZ/KOldwu5Y5 pnSsAYH0rxDIFchETGhEqQY8flhE6woclKuX/EnQbm6RXWRNj/jN9crjSlOl+JME/R4N +n2C+u2CgHx8G90dn7ERHT2oDlDu7Fm4uM+f3NplXT+vGXrmLokCPQ8Sf7h/bgs1bsYY LUUfegJTnKYYNJwhsHDkpfnEUZGtPQBVMDAFvZLo4yws1G/2bqfxXag7XPS3yxuLZoer FZaNCEHJl8Rs4f2VP5eG9tdFxNwd+eZRDJ0xF+bdD0XrRMY+cE0sFKNiwiDXPbx/Ls5P 4GMg== X-Forwarded-Encrypted: i=1; AJvYcCVLP8kh9Z6MuyEHp2jf/ZHgt7SHH7TiX8PrNuG0fpXNJrkjh30cWYQllZkJsDhvuRvMd8iW/dAS63UapY0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw2/93zMpi9RpdkAkGssW3lBUjDBCtwjYrzFcUTrUdp0HZfD7x/ amD4kldOaxDyHQ0qn+869jXHlEF2jooXkXGdK6B/P4X/Tpa1EhcRsomnkcxon7q0BEZa1NFr3ho mtwHqpH8rIH7yNAmkHIl8XBK0fw== X-Google-Smtp-Source: AGHT+IEwklIgKgfYBJsH2x38K6nG02IxhjEjNUnIs10WtpsPz1pYiv3+lkfIu6mQB40WFiX+sfUnOaWLNWjyaGgSMw== X-Received: from plje13.prod.google.com ([2002:a17:902:ed8d:b0:234:d00c:b347]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94f:b0:235:caf9:8b08 with SMTP id d9443c01a7336-23601d14ecamr213792115ad.23.1749494436659; Mon, 09 Jun 2025 11:40:36 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:23 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-3-hramamurthy@google.com> Subject: [PATCH net-next v4 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 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.50.0.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.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 B9A4621FF23 for ; Mon, 9 Jun 2025 18:40:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494440; cv=none; b=G+xRBRMasXsfnguKUOOs4uUsXt7jdcnN1s+5fUQVqizFt7jKN5W+vu10DSlAqEvCCmYy4WznAoGxp0eSma4Cz4+YNyHzXQ3+J9L4Ej38emartW+/voXW9PEC6AHDIkL3PT80nYFOYmGzGv9YRv769lOhUcehQuXfsF1pfVGPTbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494440; c=relaxed/simple; bh=p2+++y3iHclFNlQ927Q3Se5dn3Uyz9UkBJ7sepJ6Fqk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FLGwRPqweHar/BvQCXwomdoC7p4y5tA8twrhZCNF83/PRG8nPjHk8i7nq8ggZsGy7Vk+Gq2NTPxTa8YfnDYpk3PnA5JAyaRTrloX7Zhfibi7MRxERPxbr+PVBrOoSDAfuGh2B4FJP1bG5t/UrkdlhcvIsABXWOzYpkc8Xzd5m/c= 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=FLESQLN7; arc=none smtp.client-ip=209.85.214.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="FLESQLN7" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-235e3f93687so72335945ad.2 for ; Mon, 09 Jun 2025 11:40:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494438; x=1750099238; 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=5dRqLM3ld49DYouGOATOb6C0m+lQfx0X1CvE19/m2NQ=; b=FLESQLN7yJTMr+Gwphg6474oe1wc8CXM2KxOZl1ccn83q0zgZxXf85Mo60Q+DUT3v6 CXmGL6svLtRP/1X0uLbyehdTMZqQN+OAKBImn5+cw6Sam/iaI77K4s3qnVW2loF/f1At VlRJSkjWGhH/Uz9Ygu9v+q5KPvO73HrDlzxR8PhunWHEiQ565X4VPE/te/qAnWHF6L5j 9ngT0fhOvyxLBw//qhOhKI2zDdjNYw1zlAuHwORKEdb82FOJinQkxOep8xhqZDHJFnfr J6uzOcevWSHjs4VWJvmPfEfPRCZSt2lAjLRM34mUc2jdOZCl+NZOT/JIO9VHoQKOLWgt QE+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494438; x=1750099238; 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=5dRqLM3ld49DYouGOATOb6C0m+lQfx0X1CvE19/m2NQ=; b=BQFWkh4HzQ8g5tUnVr0nNZKahvzOTxZcNaPy6onreUquhOU/tich5a0Waqm12rt7Js 0wYjtnK8/8K2z7ticI5RcN2YG6eMgSHO60uKybeaffsrDDa65vL3QsWTP+Mkjpyr17yS b9Zj1nefKYQxXuDz2B6CuAKrCKNhPV07spqbFJD0VYtSb7Z9D/b/Khf0Fui+P0kSQj5v mAwX124zXUImuzzVqNgYG2yyT8YDSvdr8A/dq9fK0cSR86iK9WXSU3jQI49YE/Z7Zz8d opKUOIepH5JPKovrxiBRv1cfs7WbbkUimQD1HSF/s3hmjnGJ0q2onzmWAgnLUTdkmcLD HP4A== X-Forwarded-Encrypted: i=1; AJvYcCWTrk3A+x+XHC73+obIhEZGd1m5g2i1v7TCHGIFFPHjyfkkBs8pMW+U4sO2fVeaC3Xn9wDtERyvB3EZQW0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4KbYbMrG2TUdwwyPVrLsr3gxrOFno0Gt9S4kyPkFZ5CeZZeqa d5jjl+etuc08bWHXbMqLfM6Ov7QA3MjW/jRYx7RPRqZJAj+A8BuktqdIGECP+m6C9A+yr3ArftP HuYQ7tLGcvbodAM+a2y3T2+PmqQ== X-Google-Smtp-Source: AGHT+IH3t6UcJaY69UpI3hQC8DzIL6jD4ZPwkG36z/REKzJQsYF9rtLf9JyfsEDKsI6POhmWpw2dmjk0HWy4p2exfA== X-Received: from plpj8.prod.google.com ([2002:a17:903:3d88:b0:234:9673:1d13]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ce05:b0:235:ef67:b595 with SMTP id d9443c01a7336-23601d710bamr231474245ad.35.1749494438080; Mon, 09 Jun 2025 11:40:38 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:24 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-4-hramamurthy@google.com> Subject: [PATCH net-next v4 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.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 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 21D7121FF32 for ; Mon, 9 Jun 2025 18:40:40 +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=1749494441; cv=none; b=I6OnyzdetyqVCPhLBllx58KY3EIs/5KOIfEK6I0i5udxZdsWVkiJUnQA6n9+PZDEuSxSoH330cpxq2Q5SaEQowGV7V73K2iE2s5Mw+G9A0L/I+5qaYcWkb7DnmMLyxl/yOPzSlTfW+EdQ4LdmBrHkg4FAjtTdaKTQH3s2/e8GmY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494441; c=relaxed/simple; bh=yQa6m4QTWQuWwuSQIKl2AzKMwcKVsSDV5+YV2XGQmUA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YAYdmafnoLvhTNmMkz5excESDKfNmJFgIyYHE5jHVhQ+Cd8KRhgHgzCBDtQHbK7M4M2cw32ZR1XeBVgpMzAQd5qB1xfZcVMWAXKCk865arWABi2Y9nEhQZDsmWznRk42VFWeiq1UkoQbOdXtwr3YW+thF3JiRPwH1fdP0eZqnro= 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=iOlMaYdB; 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="iOlMaYdB" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b2eea1c2e97so3202907a12.2 for ; Mon, 09 Jun 2025 11:40:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494439; x=1750099239; 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=mcLwwmfx7bRMuR2c4/AzHTkhnnrnIq+RybS5E5Bf73k=; b=iOlMaYdB7DZ21r0W5RuTiYlKrM65iDkQLJbvQ4YiVRdIBeN3Hi2YGiIj8p1HuytA9Y IPTaDj0Sn76r1zVQCsoq6TpSScbqmjU8VO4rmL5mC8Wotw8x9NV2vK2zUHcUSGkDxY07 IUTER1+gxWcfWOECA3QS5CmhO9RcQIjD11VTcUxaYlxr8Gbrfg3vUVqQMcjfTBUAAqgI uK7WKQiEelZLEgrld4hXlIk0LmuSxvTMKQfmqIyN2u9o9j8/P3FCccxSTAK+QdZSBAsG weKszDcFW7d0Q8QaYoWB4jHjINwxWjCXhrRt04mPxc420cSJdqAr2aMzc3yYD/Dy5h5C jEgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494439; x=1750099239; 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=mcLwwmfx7bRMuR2c4/AzHTkhnnrnIq+RybS5E5Bf73k=; b=ZubYsU2Oa4BxmSKe63hbrXYdGHmuDgpskLtMjBG3o+TV9V/deLyswwaNZx/wFXvxum /4mRvq2lCyMa8aNnHDJO5zgs2lxZzjaNBGfMPECUqI0uOZSHR1b9LP1SlG7vkdv7WCk6 CSimFzNVmlayhrig+4bB77tEFxYeHtk1kzXULEL+8cH1VFN0hoSNRIIcwmuKX0I/gFbJ gqcOrisBEJPWP+DWimocZMZtQ0FnX+vrjSkO5BCZ6OLiQ9kVqUeVXNHutXZ+Dl9Gp77W Vffu8DG9a9xdXHVUMler/gq/38gZp4WF00lbceOHV6JLb0MYLilFlgCAfp8FSt2eCmI7 WeSw== X-Forwarded-Encrypted: i=1; AJvYcCVXp9UAHiIYmF94B7qw54BczOaI7GorNEhMO7S7M3oFQSCw08+OtkTidtF5HkJ/VESTsZLrRpb2/szzWrY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxzi+cVT1XHK2m38dxDfM9WhrpYe7X4jLSRMFE7WjTJgtM7qqUv bnoz3py/h47ti5DXTPOygGX62iqYCp77v9l0M4f4bPDTE5hNG8gpi93t9PpzvBrCwumqUZd0m/9 4/X7jJSBxt2jPDd2yoABtjsP52g== X-Google-Smtp-Source: AGHT+IH25qL2Mwp6kaHwBIcHvYYOIefFIHQyD6mAtoeGj8d1VX7EEScix8eZdD2u9Wj50hNeZGtSS5EK8Hn+GEEOYA== X-Received: from pgmm37.prod.google.com ([2002:a05:6a02:5525:b0:b2e:b684:1f9e]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3282:b0:1f5:7f2e:5c3c with SMTP id adf61e73a8af0-21ee257b971mr17627959637.1.1749494439469; Mon, 09 Jun 2025 11:40:39 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:25 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-5-hramamurthy@google.com> Subject: [PATCH net-next v4 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.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F099822069F for ; Mon, 9 Jun 2025 18:40:41 +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=1749494443; cv=none; b=KVKIuy0fOQgn6c/FcApeP5x3i1zC1RaCY9LZ2Y4SXbMUxQgcfxdGojo6A5Xzo0PIKzoVOHtOa+6q6+ACvNEGOkM7lzseHUA9SlEiflMMQSkBrkTmEPSNIr8G7BnqO5ti9ZTilY4lOa8Bofh0uMcP3GXJ2P9aukEWXzBQhCFJ+X8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494443; c=relaxed/simple; bh=YQvevirhrMBBhVBJpz0R5UNpqVI/DpvbzZONT42/8qA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cO81C/Xds2JZyxBerefviXvWtPFeuNWgPjx6b3kZY3kiDrq0bLQPUPpfNQ+fSNW+iAk8R+WsOgJZx6pzsv29iZNAPyvcI8JGhG8/f3qDnxCSW4ayQO1sy21v8doTM6Yzy8W1N8n70hqc2t5v46RTfe4kkTjSXUs27NWIsBpNctY= 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=OHiis1m8; 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="OHiis1m8" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-742b6705a52so7121364b3a.1 for ; Mon, 09 Jun 2025 11:40:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494441; x=1750099241; 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=MyIiE0DA8YOamFQPV3OD2HjNkzHWrf5ibVavvJjs3RE=; b=OHiis1m8jiMdABzmorvqjnXwLiJxAko4Pys9D59wUm4l/DTREvxvE2wV8GZXyt/iBs rxdj/5QZ+6Btvfi5eqSVYvwt1aRRvRbZAVAdIxQMmMW3OmZ/LeSgoqp2mzeNUbwwwjNp Y5XoARYg83bn/Ry+LjbRhkhJYGOwMvaYMl5iqLUHJ9cxtCrPqvISEbc8Rnm1w3IRLcAf WAGz9GxbYN+XgCLNWKAfsgE3TZWi897DbeANooImjQvNOYM0F+3XvU5JDSZdxv/cfUIa zYs1BYmSenvg4FvzmBGk5C2lBnZW99ONlykMdRRyGL51dmmiGZ9llBuuwYQ+k3C2fCCt mZJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494441; x=1750099241; 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=MyIiE0DA8YOamFQPV3OD2HjNkzHWrf5ibVavvJjs3RE=; b=nnu2KJB12fJZ7TKEAoXB6ieLbIQJ/VzIr/sv7jVfqGiKG83A9WdPlqWzkVnzjgXqPz Qz4m2IaiEo7+5LQXuRcn0LFJnshqQoK28AYEr7mnshvVWxnLtyzcdI+5eI4VAYslf6Fm gtbrvSxu2xOs123aCEGCyVCidS0V2Em61PSLyWTpyB75qAaj68pw9HCS8afBcWTHo5Es Y9X7RHArv8U+8h7uldUzMRHjmGROUimHNsrVWMgEMCPMCg7/b5pl0q3XGvdPYC0lOeHX gpFT/SOprChz9r9ktE8vpanOvTqu376/YlAxEv8jdpyeiWG1E9Zmb4kQ7s0Byk5WM+YP YWiw== X-Forwarded-Encrypted: i=1; AJvYcCUoEKsry9uK91RT5jvkrBzfYjUtz8zW+k/KTn2w/fYpvN34YxcMC9x67WtNRC+GBbsH+A5HzwFlHnmZwmg=@vger.kernel.org X-Gm-Message-State: AOJu0YxJDGGYMZ/2qTcEEaAXr1ejmVe1gFyWPkuqO5jtWY9TO+KyFpQt o5zp5p67YmZpsnB2YSWb+8voRT55diYErV1XDvZ3xvm68dV1XTQkA/TDuz202mky9TjwZtdHB4p HosO1kLCu5GCNVOOIVb1QRmTn+Q== X-Google-Smtp-Source: AGHT+IFD+lKhjQdB5n7ncbcQTai6HQswJDodJXuYgc65s40F3A5QoMI6DDz8flLiC3Lf+7WGt/HvkeeWxfVkA4p6uA== X-Received: from pfl4.prod.google.com ([2002:a05:6a00:704:b0:746:2d5e:7936]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1492:b0:736:3be3:3d76 with SMTP id d2e1a72fcca58-74827f15a3emr17443454b3a.17.1749494441232; Mon, 09 Jun 2025 11:40:41 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:26 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-6-hramamurthy@google.com> Subject: [PATCH net-next v4 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 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 | 15 +++++ drivers/net/ethernet/google/gve/gve_ptp.c | 82 ++++++++++++++++++++++- 2 files changed, 95 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..fe7e37d6f6b7 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,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,42 @@ 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; + + 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; + } + + ptp_schedule_worker(priv->ptp->clock, 0); + 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.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3A79220F4F for ; Mon, 9 Jun 2025 18:40:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494445; cv=none; b=tv/qQOonPbo1WGn340rgWucifywWFyfb4tAYH1ER12hv3E1yL9TJzU2If3lradIm/5otlzgOm1t4blbJYf5M7Uhv9jzYle2h7tJvGm+tft3yCbwPFnEsByb1eglNiYTBJmtyG+rLH37m6/UKYbMICeNjoyk3OF0BWjxtvT3LxYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494445; c=relaxed/simple; bh=QCRiqA7VAn5Bzf/uSF17xCHxhjH76+/XxZuTS3QiaZk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=NpAOpISKITpmUmsTvRyE5rSbshS0n+Eb8no+bPa68PkwAgu59I+cZNVuUK2gq/Z7Tl2+3EHKk5wib4EGk81FED8g1Bk+yBf+4boTHcsCeWBV55HoEgPqiJRc30x0lQ00IC8kM4JmcqdtpN3WV25xcEqrL9cj2Kwg49vzQd0U4dE= 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=RrpKECT9; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--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="RrpKECT9" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-235c897d378so43076395ad.1 for ; Mon, 09 Jun 2025 11:40:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494443; x=1750099243; 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=D1Y0C/FAqHRDO+LbKE5JJcds0KjGxqFEGkislmx1t1o=; b=RrpKECT98/x2di4uwa527TrM4LE/i4EmuRgX9QMjjy+YJtlYu2Ti9UsekvPmZCwjkr ZqyTgevU7/cKlUylNfwcBzLxGptCAF9YbCDdvRAtlLUCmQLUZp21MY8QHMJDYP+yi8d0 6XYPHqZIH606c2sJ0+kw1QWoBw31Hc7/ySCkZodDbkSfdPLI3ON9unVyQW8y1S5vdX0K bTsWVBBOD3cHJ5uY5ffF+SJt5bzGjyB12F1h+PzWfnoYbAl41NM2YBhGkNm9/U/ymZhg Wld9p52cFRYMVJLvpc88/cKli5J6trsudMrg3L+M3YduJBel03VYwJ00T55RYRT3ZhLF qQhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494443; x=1750099243; 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=D1Y0C/FAqHRDO+LbKE5JJcds0KjGxqFEGkislmx1t1o=; b=PXzQl4Tuctv0x/TQlfWpQ2JXmQ2Tpt7O9/6gScOCz5NmJcaIfZtWM7qKg15pd5iaTF OGcNNlv/zgJ4/jijZ/ROStcgXXg8lYB/FPck3+AUOekSC/RJ/hES1M6k1WGznYj+gApf IuYF1cHV5kgvX+KnfAXGd0aHW0KNX+H/a/v2P+4CnGgeMlm6ZqWzKCRXyeDkZQRp9Inj LQ1WxiJe0iqaefOWqsdOBEvHH5jMbgG0dFwDXd3ymYcwWNWfcSKm0O46Rj5DYhpJlt7h S6DCwllFDAC9mOmtfC3KaRsC2dJ5HYgAF5zDibqK/pti7bWtPOdZZFnGZeDPIIzgda2e cTzA== X-Forwarded-Encrypted: i=1; AJvYcCU7ttJExIlxoZ0u3ZPWcpWjIheQ0GIiJXEtQzF5nvqEMdADhCd/31eUOYUuKl7Qwfis71678rqHoLZpVI8=@vger.kernel.org X-Gm-Message-State: AOJu0YySa/CC7Y+9I5Na74nSZxaEgb/roYZLBIZRM+sCY9ZuQq1Er5DG UAq+eU69hNf6Ibq7WhLFYcg+kQMoAmdBzUHKL0CK5fWbqYMVmU0+++VKNHvQDsZLjHlQ14JMy1T nk/6X/WDOEuNNOIxBx0htCQC6lQ== X-Google-Smtp-Source: AGHT+IGB3OBVlk0SWiXjb3AMVXr9DDsoik9k3mZFUm83Ee4eF5UbNhOncUDYbatUZI+8Qmpaz+R6DWjZTE/muCLw/A== X-Received: from pgcv10.prod.google.com ([2002:a05:6a02:530a:b0:b2f:556f:74a2]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b47:b0:234:c549:da13 with SMTP id d9443c01a7336-23601e4b749mr207119415ad.17.1749494443018; Mon, 09 Jun 2025 11:40:43 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:27 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-7-hramamurthy@google.com> Subject: [PATCH net-next v4 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 Reviewed-by: Vadim Fedorenko --- 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.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 482C621D3E2 for ; Mon, 9 Jun 2025 18:40:45 +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=1749494446; cv=none; b=FQH166Pr6RNvZnm553XZ0p6FZrgVuO8uYVWga8vfSuhtKcHWIM4D8ZyCzjnE0MJtapgzRyb0i/KrBwLjFLyQicwBdIY5oIWiKXIHmB3ojY7PaS+iMllYDa5Lx57M+Kx/NdysYutCeJfDNGPE49iVzaBw/zJooXV9RU6JeOi1VnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494446; c=relaxed/simple; bh=4cwREFEhKaRqBkvtlaxAg0eyGMWNAlSxckgSw0l971I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JuVRYPjB4xe6GtjI/NSCLHADBLDIh/TcwwgGEc5i2E0WZWGTQmfvEeCcv7u4XVvgAH9ckg/tuEwHZBUuO8MhVn5NnvDH2IN0mNXfNUwUAc8vUGLBq2KsvIC+1T/xjp3FmTjibht0cBx+3SLG8PGZ07KlVqIbPsmO57bB0GgFRKU= 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=Gn5IqbCV; 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="Gn5IqbCV" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3138c50d2a0so1553978a91.2 for ; Mon, 09 Jun 2025 11:40:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494445; x=1750099245; 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=gJiW8NlzSCXwpo24QX8sQwDPsajyfIq0Lkzz04mvv9A=; b=Gn5IqbCVrTJuzJTSjXZ7TptscasdA/OaJg8oXYQg0u/j0eA0uNz13AFkUsxOjS/Rha Vqg94AyeoBoOia8oQ9272tDSwtHTH/QE9wUGYwldFeB8x5M1oHK9SM+3hk+MTNvgi3AC gS4pfVoYCABIzhzaBpyWF6zfG3A+2eiLn7qrpIse3Z6p6ZNWboSZHh7hVFJAaGUoa6eH l48C7St6xxYXYEKBCUwdoRg0LMolhcfPMBlBh5Nll8s8UhxXliq7gUTXnmTarIhg3a8q yZAtKT4ELF0uxZv74lpwDQjC0xmRyBZI6AAgHTX95Yr0DBhQT3/3PPjLzgJJR1J7oMFk IfAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494445; x=1750099245; 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=gJiW8NlzSCXwpo24QX8sQwDPsajyfIq0Lkzz04mvv9A=; b=cxeVxnhIDetIXRSzwuE+rntSIewni1d3SfSfJiIj3Bn9PIr9KPQecJyBbU4rrEXfS5 rTH8CKhR7Q1JRl0FEB4C50QEI3m2t02JfUZhN1fkRHjzq90YYJG1GUuASMKNcqbodVpo /VWAbsu7wKaXs6azfkqVbKBiicqTee0CfNlhedbArVwNZPVL8tcBoRmPIguffU6fEIAN lE9LT5e2lbfy2EsO5WC0Ik9J41mkTPrpzfo+J5ixGw21rqKLT6X4PhC7ewpVRD8CH+pA 8DMRxekcT/ZqX9jEa9LbMwgj77wRMeZSD1IL1wkHvV83PSUcQOoHFcfat60LPPoFVuQ8 L/Sw== X-Forwarded-Encrypted: i=1; AJvYcCU4uCi9F9vlp6SHDh2SiPfsZCAACYr1cJ4Z/Mcg0dYxsyIVvGQphsxvLN5uBRbBL1buoH/taVOVIJ+DEnw=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0lIiLYDNxlBPl2iRkvJY3qaYowcRgWQrcBV7N9EY1r8mUO+Vs a7eJOq+VUj+4qx/NCPM4mC+0fn9bp0Nv1eIAVlfCOZQjOGhqU3DB9JPNrraVnkzfVchAgfIg4jg 2syXsNb1otFl51dFj7n0PkonmvQ== X-Google-Smtp-Source: AGHT+IE+UmzCwfvFNIoSd5/fnZN5jMKsNc9b4ETH31hT6Ph1q9dwMRJK8rymAG4W6iK4kgtGihKL5SmSu341nuYVDg== X-Received: from pjbnb8.prod.google.com ([2002:a17:90b:35c8:b0:311:ff32:a85d]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1b0e:b0:311:ff18:b83e with SMTP id 98e67ed59e1d1-31346b29b98mr21526112a91.9.1749494444669; Mon, 09 Jun 2025 11:40:44 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:28 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-8-hramamurthy@google.com> Subject: [PATCH net-next v4 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 7cd1eda0b449..fe34ccedc9df 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.50.0.rc0.604.gd4ff7b7c86-goog From nobody Sat Feb 7 19:57:05 2026 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 1D79A221D88 for ; Mon, 9 Jun 2025 18:40:46 +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=1749494448; cv=none; b=lp5zF5JyNWbIW86JLmS5jA15Zrq3L/0bwg/FWDYI2Mx9SDY8D2QdrNpeFRxePXtttxeH31W0LIoHzzq5uhrDHDvKkYw3Diuwi5s9r4q9GiepQjIvhes3nqzMP90Jg3Jprcc/pwLWxQ417NuwLyp64YSymXeMxNH6erdOfUAf3V0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749494448; c=relaxed/simple; bh=boQTOjwX2c24Pfybgax6/PQtLcHgfszsI3qjmInlNss=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=imjimX7jxX7sOa82UaGapc4noMLZbhb9Y+3lvBBGk4D0wrKhmPBA3Dvi6V6Q5Tk8dqD7Py7Vt0UlIXquqFc4NcikTULUFb5zVqAclfILHqEtvRIXwDgMjwrd8ihEEgIkbb8BWNOn8z4nlt5gEGfFTjeLYkAlZSBbFKKoI0Shp0g= 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=vdJDD0qs; 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="vdJDD0qs" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-747a9ef52a4so6490337b3a.2 for ; Mon, 09 Jun 2025 11:40:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1749494446; x=1750099246; 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=JQwIWqCovddalYZ+Q/3W9PbmXzGEa6NGqsKWKK++Z+Y=; b=vdJDD0qsNR/D29b3pr2csov13tWMefsAcf9mtjfCtJ+G+KlPSdAf7SDEG8n0idFmUo kim4LJmTlDCQAiDHkvGuACqeV2YFtStrayKgKV7XvyInRCGca+IK7oFwT3Bl7HS3GXRj HdDKAGq9cgkduB26LdUYsg9BUbcMisPqXn0/ZxgB20Ks5v8giO2BCFSRpg4ATySK419o VfDluDYJj1HZMD4fQMdrUyFQELjI0wUDoUkvmYETPaIx1dpI4NhJzIpN8n6uJ0pfMOQ4 3XrKt6f+bqVNdkdBarhHb6RR1GvMcpnwIkypxpOo13YtulBdzS4w95c4l4L7mEl82oLI grFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749494446; x=1750099246; 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=JQwIWqCovddalYZ+Q/3W9PbmXzGEa6NGqsKWKK++Z+Y=; b=f4HW1wbXsvZoF6QfwJNR4ekrc9PNPUtK2TTdzQcOm/GpjYOUQkCx9We3Jw95CEA5Xr TEDqXDWQ5iT6Ypp7sO7d2Uhi4HdwRnZXWREkNcMZchht/UQeYm/iiFzRvxXIAhs44bii 1pOQ2VEyaZE1k6zcDOkXSTqAxwRBgsd8J+L7RHQHVnIiISmiNtHpJPNj0IrGY+8/TwiY qkglIr6pcmoQOQJgv+bAyUCypft538iXwjNsIpxRXwJ6auEwaV+NjsXxOmlu2HhkaBCF U2mVhAiJJDqIxeVoaMMYG300s2peg1AH4oToMJkECxj419df8IvVDl2/5eUqOIkqmHpx Exvw== X-Forwarded-Encrypted: i=1; AJvYcCUGX6fRtL8ZZdSijv8bKy2CFijN7eJowWTKfeVFUSCyeI+NdDp3o6P2qWkYMHf108vXFwprMLYbVepmZ44=@vger.kernel.org X-Gm-Message-State: AOJu0YxEc0Jx7OnOpp8HObGKO4L52JQUYqTgSwBHud4LFUDMaPtqPucA KfxVu87VzJqWxfCXdBZfqwSeFdu9yL4MA+/j9wApUgyKZLPytY8luQiJRovZV8LS5EKOzVQMi7R m/CDkCqbAnyNLCjnyK5aIbqHZOQ== X-Google-Smtp-Source: AGHT+IHeuoUadWEWKD3pSguppbjeD/22TcrgtZyG+qx5oXdrfnVBAmpamNsRrF2RlWf+7q5vo7WLI91ENJovTM6YPQ== X-Received: from pfbcj6.prod.google.com ([2002:a05:6a00:2986:b0:746:2414:11ef]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:999c:b0:1f5:72eb:8b62 with SMTP id adf61e73a8af0-21ee68c8addmr20977983637.20.1749494446304; Mon, 09 Jun 2025 11:40:46 -0700 (PDT) Date: Mon, 9 Jun 2025 18:40:29 +0000 In-Reply-To: <20250609184029.2634345-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: <20250609184029.2634345-1-hramamurthy@google.com> X-Mailer: git-send-email 2.50.0.rc0.604.gd4ff7b7c86-goog Message-ID: <20250609184029.2634345-9-hramamurthy@google.com> Subject: [PATCH net-next v4 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.50.0.rc0.604.gd4ff7b7c86-goog