From nobody Fri Dec 19 17:19:14 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A884010F9 for ; Sat, 17 May 2025 00:11:21 +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=1747440683; cv=none; b=JSW/SVe+BkJG3qtXUOIZP7qHpHHovpBE6W75b+U6r4We1nTjQ74MIzRXAj+fmzA+7vgHCWFUiTR+i/kNDw62oKVb1HhMpH5GWI/nVAOvKmTtWx/JHqb7za1b8inElednc0wrhFCz5HQhJD1KkBXzHwOXj+d92Ift0jLEsDBjCb4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440683; c=relaxed/simple; bh=mOmbj+5vSH7IyrCyn8tyERKZSDH4D2zlgi/NZ8vo9X4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jPFL0a6I+pAT1KKRAxAnwrrE9IB0Nx4qYakiTerGjN4JCErfNQEZYww4ovwwFUfTPsRdZ6AWk4uww5geyqO68FcjSiHoS+Zzyl+4MEmxeq8XW/Syls8XPZZgG1GyPrZUH2up2bN7VFNS+898Zg1ZSSZtwvv+ahe3HKhhGqoSVAM= 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=B66/8Qa7; 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="B66/8Qa7" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7398d70abbfso3524363b3a.2 for ; Fri, 16 May 2025 17:11:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440681; x=1748045481; 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=OCb7mTxdjxlA9jLhrMDPySv3BcuUTjIV604os16Gf6s=; b=B66/8Qa7kIEHQcX+miaFIYOCstuAdbP7t+PW7XITsL4s8tBvXhZrfF8PoOvykKzFVr 7b0v/LmufC0MtOzibXsStRPqXlpVgBa175kA4UscE5rQhm/KnUQCDv2ohGp5bq1Oykbf aIKjDyLeKIYvy6oHaIAY3fQyyr9PK6h0OezBj6zcG9dCDkeWbEufwN7n1f1VGjZp49qa 5ZAQCB6mp4sbzOS8yQTwJvTpMI9VIY9g19zdP5Ptz0MIOWv+VCjSfrEZeRdU6e7jn82z U+Sk0d76hpO/CVOJ/4vP0k/8bgiVRBIW1SE6wT8ze6YW+wvgUfSvCCviuhOQNQEFvhRM 2U6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440681; x=1748045481; 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=OCb7mTxdjxlA9jLhrMDPySv3BcuUTjIV604os16Gf6s=; b=Xkk65Ta7m4HdQRd6hO8bVT739s2NL0XeW/DY+k4ehLKQOTSmEJXGsn3Lb6Y8udWql+ SRD+kMC2bhnlSWyoaMVNSpLUJJ0mm65wsHy3TAMqYQD8iHnfevn9N6dc/obM2hOPMAcN Lf2nEVsFtxUYMAG00chdr5lg2x4dvfs+aShI4RFwESaf7v7DPIYzwektZW41pGCm+vdp eYJZrl3RsWBVQsbQoeB44PgaksfQ1WQWDYRS7wb2QVODln7kvn5r13/ZAe2xXsXXtpfd afjsgu+Eom+8MSUwBp6k8tNglLbd7zKV+0iBHzd+HWRyWgmaWCRNtN6VK0YEZT2mOgoY okYw== X-Forwarded-Encrypted: i=1; AJvYcCXHXyA4gTofHDoGcf1BLCFWUkRbQMHz0jm3mS5V2AnXy9qQ2XLV7TLtp5sOV7kyfa2q/HrmWtgd/OuEn2c=@vger.kernel.org X-Gm-Message-State: AOJu0Ywgq39GHg4MHCzMgY7/ZFs7Jf66dhF0Lq/Ngh7YxJzFaivqjZwr QAMKMTWaLCo/iYthlPT2bZempCT4CwYPeDx7t29wxKfrZD/6zrYG0XIPOv7uITM+WJsAjJaYKwd 5EZKconxnZ+eRX+dm1wbyJ1vtBg== X-Google-Smtp-Source: AGHT+IFnPhEgf3hMGnVk5nE76nyxCVm/1wiYowX1QO4lFUbgADc8p1obHBrFOxFLV/uRrdKWvRiUBaeW7Jncmma6Og== X-Received: from pfblr29.prod.google.com ([2002:a05:6a00:739d:b0:742:925f:bdf7]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2442:b0:742:a91d:b2f5 with SMTP id d2e1a72fcca58-742a97f2372mr7197918b3a.13.1747440680893; Fri, 16 May 2025 17:11:20 -0700 (PDT) Date: Sat, 17 May 2025 00:11:03 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-2-hramamurthy@google.com> Subject: [PATCH net-next v2 1/8] gve: Add device option for nic clock synchronization From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org, Jeff Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Add the device option and negotiation with the device for clock synchronization with the nic. This option is necessary before the driver will advertise support for hardware timestamping or other related features. Signed-off-by: Jeff Rogers Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 3 ++ drivers/net/ethernet/google/gve/gve_adminq.c | 31 +++++++++++++++++++- drivers/net/ethernet/google/gve/gve_adminq.h | 9 ++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 2fab38c8ee78..e9b2c1394b1f 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -870,6 +870,9 @@ struct gve_priv { u16 rss_lut_size; bool cache_rss_config; struct gve_rss_config rss_config; + + /* True if the device supports reading the nic clock */ + bool nic_timestamp_supported; }; =20 enum gve_service_task_flags_bit { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index 3e8fc33cc11f..ae20d2f7e6e1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -46,6 +46,7 @@ void gve_parse_device_option(struct gve_priv *priv, struct gve_device_option_buffer_sizes **dev_op_buffer_sizes, struct gve_device_option_flow_steering **dev_op_flow_steering, struct gve_device_option_rss_config **dev_op_rss_config, + struct gve_device_option_nic_timestamp **dev_op_nic_timestamp, struct gve_device_option_modify_ring **dev_op_modify_ring) { u32 req_feat_mask =3D be32_to_cpu(option->required_features_mask); @@ -225,6 +226,23 @@ void gve_parse_device_option(struct gve_priv *priv, "RSS config"); *dev_op_rss_config =3D (void *)(option + 1); break; + case GVE_DEV_OPT_ID_NIC_TIMESTAMP: + if (option_length < sizeof(**dev_op_nic_timestamp) || + req_feat_mask !=3D GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP) { + dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT, + "Nic Timestamp", + (int)sizeof(**dev_op_nic_timestamp), + GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP, + option_length, req_feat_mask); + break; + } + + if (option_length > sizeof(**dev_op_nic_timestamp)) + dev_warn(&priv->pdev->dev, + GVE_DEVICE_OPTION_TOO_BIG_FMT, + "Nic Timestamp"); + *dev_op_nic_timestamp =3D (void *)(option + 1); + break; default: /* If we don't recognize the option just continue * without doing anything. @@ -246,6 +264,7 @@ gve_process_device_options(struct gve_priv *priv, struct gve_device_option_buffer_sizes **dev_op_buffer_sizes, struct gve_device_option_flow_steering **dev_op_flow_steering, struct gve_device_option_rss_config **dev_op_rss_config, + struct gve_device_option_nic_timestamp **dev_op_nic_timestamp, struct gve_device_option_modify_ring **dev_op_modify_ring) { const int num_options =3D be16_to_cpu(descriptor->num_device_options); @@ -269,6 +288,7 @@ gve_process_device_options(struct gve_priv *priv, dev_op_dqo_rda, dev_op_jumbo_frames, dev_op_dqo_qpl, dev_op_buffer_sizes, dev_op_flow_steering, dev_op_rss_config, + dev_op_nic_timestamp, dev_op_modify_ring); dev_opt =3D next_opt; } @@ -904,6 +924,8 @@ static void gve_enable_supported_features(struct gve_pr= iv *priv, *dev_op_flow_steering, const struct gve_device_option_rss_config *dev_op_rss_config, + const struct gve_device_option_nic_timestamp + *dev_op_nic_timestamp, const struct gve_device_option_modify_ring *dev_op_modify_ring) { @@ -980,10 +1002,15 @@ static void gve_enable_supported_features(struct gve= _priv *priv, "RSS device option enabled with key size of %u, lut size of %u.\n", priv->rss_key_size, priv->rss_lut_size); } + + if (dev_op_nic_timestamp && + (supported_features_mask & GVE_SUP_NIC_TIMESTAMP_MASK)) + priv->nic_timestamp_supported =3D true; } =20 int gve_adminq_describe_device(struct gve_priv *priv) { + struct gve_device_option_nic_timestamp *dev_op_nic_timestamp =3D NULL; struct gve_device_option_flow_steering *dev_op_flow_steering =3D NULL; struct gve_device_option_buffer_sizes *dev_op_buffer_sizes =3D NULL; struct gve_device_option_jumbo_frames *dev_op_jumbo_frames =3D NULL; @@ -1024,6 +1051,7 @@ int gve_adminq_describe_device(struct gve_priv *priv) &dev_op_buffer_sizes, &dev_op_flow_steering, &dev_op_rss_config, + &dev_op_nic_timestamp, &dev_op_modify_ring); if (err) goto free_device_descriptor; @@ -1088,7 +1116,8 @@ int gve_adminq_describe_device(struct gve_priv *priv) gve_enable_supported_features(priv, supported_features_mask, dev_op_jumbo_frames, dev_op_dqo_qpl, dev_op_buffer_sizes, dev_op_flow_steering, - dev_op_rss_config, dev_op_modify_ring); + dev_op_rss_config, dev_op_nic_timestamp, + dev_op_modify_ring); =20 free_device_descriptor: dma_pool_free(priv->adminq_pool, descriptor, descriptor_bus); diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/eth= ernet/google/gve/gve_adminq.h index 228217458275..42466ee640f1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -174,6 +174,12 @@ struct gve_device_option_rss_config { =20 static_assert(sizeof(struct gve_device_option_rss_config) =3D=3D 8); =20 +struct gve_device_option_nic_timestamp { + __be32 supported_features_mask; +}; + +static_assert(sizeof(struct gve_device_option_nic_timestamp) =3D=3D 4); + /* Terminology: * * RDA - Raw DMA Addressing - Buffers associated with SKBs are directly DMA @@ -192,6 +198,7 @@ enum gve_dev_opt_id { GVE_DEV_OPT_ID_JUMBO_FRAMES =3D 0x8, GVE_DEV_OPT_ID_BUFFER_SIZES =3D 0xa, GVE_DEV_OPT_ID_FLOW_STEERING =3D 0xb, + GVE_DEV_OPT_ID_NIC_TIMESTAMP =3D 0xd, GVE_DEV_OPT_ID_RSS_CONFIG =3D 0xe, }; =20 @@ -206,6 +213,7 @@ enum gve_dev_opt_req_feat_mask { GVE_DEV_OPT_REQ_FEAT_MASK_MODIFY_RING =3D 0x0, GVE_DEV_OPT_REQ_FEAT_MASK_FLOW_STEERING =3D 0x0, GVE_DEV_OPT_REQ_FEAT_MASK_RSS_CONFIG =3D 0x0, + GVE_DEV_OPT_REQ_FEAT_MASK_NIC_TIMESTAMP =3D 0x0, }; =20 enum gve_sup_feature_mask { @@ -214,6 +222,7 @@ enum gve_sup_feature_mask { GVE_SUP_BUFFER_SIZES_MASK =3D 1 << 4, GVE_SUP_FLOW_STEERING_MASK =3D 1 << 5, GVE_SUP_RSS_CONFIG_MASK =3D 1 << 7, + GVE_SUP_NIC_TIMESTAMP_MASK =3D 1 << 8, }; =20 #define GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING 0x0 --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CBEA4B1E76 for ; Sat, 17 May 2025 00:11:23 +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=1747440684; cv=none; b=aiC8VLcM0IsPBAcbLEVvKgDMurh2CIouRN6lDJ2/bDxUFuOaYAh0dim0Q65s1A3C6kzHO6RLXhd2ApyrF/q6vIZHdTXbUesjwM0j18a81cRZdY2HkXVw86NSESX2VZGam3N4Ht4cS6DUCCPWfA2s/mi/OtIFJ6hF+tL5hChdP0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440684; c=relaxed/simple; bh=31/lJG2o9SmyuuN41N4MSO6lGomIejPftCbufxmondo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=bA4I5s0aRqXOkR/59TdJ6ObP4Qbc36BiuBzvWAPaYhZBj6VPnKszW4/X5v3B96ojF8QVjH+xOCAZF3KX8EO1oKEuMCewpiAZzrNSYbgaVm6EFJOKC6U/evOQn3htF/d3eqmflmPHg1cRnluXCRnLZrwXLqg/YC4EZXoY53H9AO0= 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=SVf0NUOV; 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="SVf0NUOV" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7394772635dso1883700b3a.0 for ; Fri, 16 May 2025 17:11:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440682; x=1748045482; 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=1ttLP5/DGr+2kXi412ZAPLztPKPEo0E+jvKivP2tqC0=; b=SVf0NUOV/EAkStORC6dSUaH37O4nEm1KNXsDAp5eFEd1DqiBEXOZ/hxGo9vWbBq0bg f3jIQQMDX8IAflf3iopA60+ySoX2NjnTWoGye3agOvYPIM4/00El4PMN/sFCXEc8WZDE K3Opnqy2uYMWjjDo0Co/HKdjrTqhghxI1xuCnb0rPZnoz49JihWfRnZQIat8De5AMRZd kWSFS0OteivrEIYBshoVkD55r5kXEJoa9jk9SqnlZJ5NrAX0+R2D3W1zJbWMfwbmB0O4 zXEa7gvV3tERNhYERLdbr08/G5JJlNwPne6GRHBaFzM7tMFX0ihcqKI7QskzqA6lEOod dMqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440682; x=1748045482; 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=1ttLP5/DGr+2kXi412ZAPLztPKPEo0E+jvKivP2tqC0=; b=X0D0IJCLumg7Hn2L4JCSXMO6fNVYFjfQhpFgKAYFr8CB6HnOeQGJfIOLuYqGoA/MCW 1qA1kjA1+ZR+PGegoYDucrCVGuP/ZPdX7q+tbRrG165B8uixyR/yIMrXwdHbkzbkhG6L 8si0OfPQjYCBwtXBiv5qxkzD2xqt7E08VpyBWmj7HRLzWoh3EFh517ur6c8M0HZeLWAz gmzn+/yQTn0Nh0PdfxjUou0k0vB+yDGNhhTJhjsaBhXkd9713frdAFnRlSar0UK9gZEf y7/ZUSaYYgcNcBLy4AmEqAKD2EEE4JE5XOI5goqgkt8GnIDFYbns4EmAmACK1ix6iJiq m1hw== X-Forwarded-Encrypted: i=1; AJvYcCXSK7rLi1f7VwPBH+51EdBosB7fug7oNCCt98f6JP6DyR9uUyN/XjLoXXZPtLRU9/XcgIdrJKHWsCh030M=@vger.kernel.org X-Gm-Message-State: AOJu0YxZIXUOdJbNwQh9g8TMUCYJ4B0DgHX8uGqYebpeMY9iaU1quQK8 f5reWsWfFNNFaO+VuWMIT3ZD1dA7eBqPqKSpb+Qd6hY54CfWN0of7Hd4tJsqH2X+0VI2Km9fF5o nLEEriToJPGqqGYSUIJwZxzGMTQ== X-Google-Smtp-Source: AGHT+IFa3FKZZGciD/8w9fAQFp2nYbL5Y+FyKdncvT6yy/P7vYEq8etjUMsZQG+X/UwCxOLYbyThsVLf0pguBYanaQ== X-Received: from pjee12.prod.google.com ([2002:a17:90b:578c:b0:30e:840f:131e]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:c916:b0:203:bb3b:5f1e with SMTP id adf61e73a8af0-2170c7232ffmr6404882637.1.1747440682467; Fri, 16 May 2025 17:11:22 -0700 (PDT) Date: Sat, 17 May 2025 00:11:04 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-3-hramamurthy@google.com> Subject: [PATCH net-next v2 2/8] gve: Add adminq command to report nic timestamp From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org, Jeff Rogers Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Add an adminq command to read NIC's hardware clock. The driver allocates dma memory and passes that dma memory address to the device. The device then writes the clock to the given address. Signed-off-by: Jeff Rogers Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 1 + drivers/net/ethernet/google/gve/gve_adminq.c | 20 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_adminq.h | 17 ++++++++++++++++ drivers/net/ethernet/google/gve/gve_ethtool.c | 3 ++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index e9b2c1394b1f..cf6947731a9b 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -813,6 +813,7 @@ struct gve_priv { u32 adminq_set_driver_parameter_cnt; u32 adminq_report_stats_cnt; u32 adminq_report_link_speed_cnt; + u32 adminq_report_nic_timestamp_cnt; u32 adminq_get_ptype_map_cnt; u32 adminq_verify_driver_compatibility_cnt; u32 adminq_query_flow_rules_cnt; diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index ae20d2f7e6e1..f57913a673b4 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -326,6 +326,7 @@ int gve_adminq_alloc(struct device *dev, struct gve_pri= v *priv) priv->adminq_set_driver_parameter_cnt =3D 0; priv->adminq_report_stats_cnt =3D 0; priv->adminq_report_link_speed_cnt =3D 0; + priv->adminq_report_nic_timestamp_cnt =3D 0; priv->adminq_get_ptype_map_cnt =3D 0; priv->adminq_query_flow_rules_cnt =3D 0; priv->adminq_cfg_flow_rule_cnt =3D 0; @@ -564,6 +565,9 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, case GVE_ADMINQ_REPORT_LINK_SPEED: priv->adminq_report_link_speed_cnt++; break; + case GVE_ADMINQ_REPORT_NIC_TIMESTAMP: + priv->adminq_report_nic_timestamp_cnt++; + break; case GVE_ADMINQ_GET_PTYPE_MAP: priv->adminq_get_ptype_map_cnt++; break; @@ -1229,6 +1233,22 @@ int gve_adminq_report_link_speed(struct gve_priv *pr= iv) return err; } =20 +int gve_adminq_report_nic_ts(struct gve_priv *priv, + dma_addr_t nic_ts_report_addr) +{ + union gve_adminq_command cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode =3D cpu_to_be32(GVE_ADMINQ_REPORT_NIC_TIMESTAMP); + cmd.report_nic_ts =3D (struct gve_adminq_report_nic_ts) { + .nic_ts_report_len =3D + cpu_to_be64(sizeof(struct gve_nic_ts_report)), + .nic_ts_report_addr =3D cpu_to_be64(nic_ts_report_addr), + }; + + return gve_adminq_execute_cmd(priv, &cmd); +} + int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, struct gve_ptype_lut *ptype_lut) { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/eth= ernet/google/gve/gve_adminq.h index 42466ee640f1..9360b84536d5 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -27,6 +27,7 @@ enum gve_adminq_opcodes { GVE_ADMINQ_GET_PTYPE_MAP =3D 0xE, GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY =3D 0xF, GVE_ADMINQ_QUERY_FLOW_RULES =3D 0x10, + GVE_ADMINQ_REPORT_NIC_TIMESTAMP =3D 0x11, GVE_ADMINQ_QUERY_RSS =3D 0x12, =20 /* For commands that are larger than 56 bytes */ @@ -401,6 +402,19 @@ struct gve_adminq_report_link_speed { =20 static_assert(sizeof(struct gve_adminq_report_link_speed) =3D=3D 8); =20 +struct gve_adminq_report_nic_ts { + __be64 nic_ts_report_len; + __be64 nic_ts_report_addr; +}; + +static_assert(sizeof(struct gve_adminq_report_nic_ts) =3D=3D 16); + +struct gve_nic_ts_report { + __be64 nic_timestamp; /* NIC clock in nanoseconds */ + __be64 reserved1; + __be64 reserved2; +}; + struct stats { __be32 stat_name; __be32 queue_id; @@ -594,6 +608,7 @@ union gve_adminq_command { struct gve_adminq_query_flow_rules query_flow_rules; struct gve_adminq_configure_rss configure_rss; struct gve_adminq_query_rss query_rss; + struct gve_adminq_report_nic_ts report_nic_ts; struct gve_adminq_extended_command extended_command; }; }; @@ -633,6 +648,8 @@ int gve_adminq_reset_flow_rules(struct gve_priv *priv); int gve_adminq_query_flow_rules(struct gve_priv *priv, u16 query_opcode, u= 32 starting_loc); int gve_adminq_configure_rss(struct gve_priv *priv, struct ethtool_rxfh_pa= ram *rxfh); int gve_adminq_query_rss_config(struct gve_priv *priv, struct ethtool_rxfh= _param *rxfh); +int gve_adminq_report_nic_ts(struct gve_priv *priv, + dma_addr_t nic_ts_report_addr); =20 struct gve_ptype_lut; int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/et= hernet/google/gve/gve_ethtool.c index 3c1da0cf3f61..d0628e25a82d 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -76,7 +76,7 @@ static const char gve_gstrings_adminq_stats[][ETH_GSTRING= _LEN] __nonstring_array "adminq_dcfg_device_resources_cnt", "adminq_set_driver_parameter_cnt", "adminq_report_stats_cnt", "adminq_report_link_speed_cnt", "adminq_get_pt= ype_map_cnt", "adminq_query_flow_rules", "adminq_cfg_flow_rule", "adminq_cfg_rss_cnt", - "adminq_query_rss_cnt", + "adminq_query_rss_cnt", "adminq_report_nic_timestamp_cnt", }; =20 static const char gve_gstrings_priv_flags[][ETH_GSTRING_LEN] =3D { @@ -456,6 +456,7 @@ gve_get_ethtool_stats(struct net_device *netdev, data[i++] =3D priv->adminq_cfg_flow_rule_cnt; data[i++] =3D priv->adminq_cfg_rss_cnt; data[i++] =3D priv->adminq_query_rss_cnt; + data[i++] =3D priv->adminq_report_nic_timestamp_cnt; } =20 static void gve_get_channels(struct net_device *netdev, --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3A6ADF5C for ; Sat, 17 May 2025 00:11:24 +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=1747440686; cv=none; b=IrLSoJmYOx9S9NbKun86FzkUrLTNVeEI4mAxFtgw7LXk8DVAUvt48EGX5z7WsypJDcefCxwGqyGhZdg6/sDt0jGNa0uy4DCSoimLDMYFN/hkE6/yiNgsq4y1IEBgvt+CTm6d33K20Dr8r5eE8Y5uA1sXA2EWmEdtarugR+UCN5k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440686; c=relaxed/simple; bh=9wz9A6ZhWnv4sHTAE+Yi2UtRzAuqbl9I6dfwSAE0DSc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cf0YU3tNMI0aeUS4ZJgGoABKWcNfiEkPMPGPJ0p+aUke2hfsuW6RVL0tzMo2WlSfgxhX3G6BmTF5sM0+V0Xiy0vin2En2JFZWQ7UVMvmHWYXcIH8i6P8dArYMPSlFSQe2XyseKP8fZXC36fYG9SMGDgZRCOsbtDTyszEIyGGUw8= 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=R9/+X0iG; 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="R9/+X0iG" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-30e8baf5754so625407a91.1 for ; Fri, 16 May 2025 17:11:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440684; x=1748045484; 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=7Oy26cfCmc6sp3CkrnhJzJ5Gv1rNunR4QAXWZSb4CvI=; b=R9/+X0iGXUD+ZsTSdGOsMRO8w6FCrW36qpetZmGBMe40aJxeUf5ZduYOzRvQdgst8l LkiaCjTlaxex4XgimXc084a9PXjqlZ0cHUUF4tKQUoZH0fi7mih7Po0dSJ4LCzGeYYMx 6fC9bzXFIFgSz7WiuNcY3F6xE8ECjH+wSy6XX+3+g2NQc1SFsBt7+E7bkKstXhPxAO98 mX/QMsrgMXUyqbOGIYWbwarT1Rm/JXCHStD17cH60meiaVdpXyrpLu5RP2hUX5DPXuqn hVET5CqdwFlNfG4l/0Qk5XasJNFoT3BijAswTlNWmHlbyAqF/bX46bZzqxnAkK/KIEGx F9lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440684; x=1748045484; 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=7Oy26cfCmc6sp3CkrnhJzJ5Gv1rNunR4QAXWZSb4CvI=; b=QHJ3+YR1RsnlrFZ8c/H/HecUtqgEeZGYG3QK4ki1aGXdvr91gRLnArYWaoa3qLhD8M ynu9hKHCnTNrq26AnWPzJ8OKrPXvC0aRyI1bhdlDGYC9frDYAo9MGoOxNc7w/ypTdHYh q3koXDwA/ojqagq8kzkYTb8s8Sq7UuIEuXoSdQNq78zs9dK6C6bRTU76TWzVcCQdfgGH 8aL2vNy8TxSirmikAgnOsSajJNg3aVblKIogrkGBa5+aip+1ojAqFbt9MFOvQaUVWhN6 00gXjt9vXs5x65/m8tUZDwVYep01SsRUS4Zfm/bqvM3yZU126bfux6o6l+AXu6WUgacd C3uw== X-Forwarded-Encrypted: i=1; AJvYcCUpD7JueuJT7zMfWZJtn4We91fx51+e/sE0zIG9bExddJ9IsyqJJgBOh0KB0kOmZYr12kxGbTa5wp5hMAI=@vger.kernel.org X-Gm-Message-State: AOJu0Yzbu9vvuvn8PHIpCWL/WpxboUaLmPHRUgNGvttJ4ONaOMjAhQCt rGFOq3AkRI37n83LisQ1KpqcyR5o1yzRwFku7TptQ5aNXdVUTn8t9MobjNQAXbrGYySHZfqZNzE xdxL4ebwFBq2vVml6N3p1j71JAA== X-Google-Smtp-Source: AGHT+IHirGqqBdLOW0UfuLcd5oRFp90PeaPE75634MGtyiblMRSPxGVoC5Lkl4bsP25R43acec8mGLqZ/Iov6PAPyg== X-Received: from pjbpv7.prod.google.com ([2002:a17:90b:3c87:b0:301:1ea9:63b0]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3c90:b0:30e:37be:6963 with SMTP id 98e67ed59e1d1-30e83228d1cmr7043404a91.29.1747440684049; Fri, 16 May 2025 17:11:24 -0700 (PDT) Date: Sat, 17 May 2025 00:11:05 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-4-hramamurthy@google.com> Subject: [PATCH net-next v2 3/8] gve: Add initial PTP device support From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the device supports reading of the nic clock, add support to initialize and register the PTP clock. Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/Kconfig | 1 + drivers/net/ethernet/google/gve/Makefile | 4 +- drivers/net/ethernet/google/gve/gve.h | 8 +++ drivers/net/ethernet/google/gve/gve_ptp.c | 59 +++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/google/gve/gve_ptp.c diff --git a/drivers/net/ethernet/google/Kconfig b/drivers/net/ethernet/goo= gle/Kconfig index 564862a57124..14c9431e15e5 100644 --- a/drivers/net/ethernet/google/Kconfig +++ b/drivers/net/ethernet/google/Kconfig @@ -18,6 +18,7 @@ if NET_VENDOR_GOOGLE config GVE tristate "Google Virtual NIC (gVNIC) support" depends on (PCI_MSI && (X86 || CPU_LITTLE_ENDIAN)) + depends on PTP_1588_CLOCK_OPTIONAL select PAGE_POOL help This driver supports Google Virtual NIC (gVNIC)" diff --git a/drivers/net/ethernet/google/gve/Makefile b/drivers/net/etherne= t/google/gve/Makefile index 4520f1c07a63..e0ec227a50f7 100644 --- a/drivers/net/ethernet/google/gve/Makefile +++ b/drivers/net/ethernet/google/gve/Makefile @@ -1,5 +1,7 @@ # Makefile for the Google virtual Ethernet (gve) driver =20 obj-$(CONFIG_GVE) +=3D gve.o -gve-objs :=3D gve_main.o gve_tx.o gve_tx_dqo.o gve_rx.o gve_rx_dqo.o gve_e= thtool.o gve_adminq.o gve_utils.o gve_flow_rule.o \ +gve-y :=3D gve_main.o gve_tx.o gve_tx_dqo.o gve_rx.o gve_rx_dqo.o gve_etht= ool.o gve_adminq.o gve_utils.o gve_flow_rule.o \ gve_buffer_mgmt_dqo.o + +gve-$(CONFIG_PTP_1588_CLOCK) +=3D gve_ptp.o diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index cf6947731a9b..8d2aa654fd4c 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -750,6 +751,12 @@ struct gve_rss_config { u32 *hash_lut; }; =20 +struct gve_ptp { + struct ptp_clock_info info; + struct ptp_clock *clock; + struct gve_priv *priv; +}; + struct gve_priv { struct net_device *dev; struct gve_tx_ring *tx; /* array of tx_cfg.num_queues */ @@ -874,6 +881,7 @@ struct gve_priv { =20 /* True if the device supports reading the nic clock */ bool nic_timestamp_supported; + struct gve_ptp *ptp; }; =20 enum gve_service_task_flags_bit { diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethern= et/google/gve/gve_ptp.c new file mode 100644 index 000000000000..293f8dd49afe --- /dev/null +++ b/drivers/net/ethernet/google/gve/gve_ptp.c @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* Google virtual Ethernet (gve) driver + * + * Copyright (C) 2025 Google LLC + */ + +#include "gve.h" + +static const struct ptp_clock_info gve_ptp_caps =3D { + .owner =3D THIS_MODULE, + .name =3D "gve clock", +}; + +static int __maybe_unused gve_ptp_init(struct gve_priv *priv) +{ + struct gve_ptp *ptp; + int err; + + if (!priv->nic_timestamp_supported) { + dev_dbg(&priv->pdev->dev, "Device does not support PTP\n"); + return -EOPNOTSUPP; + } + + priv->ptp =3D kzalloc(sizeof(*priv->ptp), GFP_KERNEL); + if (!priv->ptp) + return -ENOMEM; + + ptp =3D priv->ptp; + ptp->info =3D gve_ptp_caps; + ptp->clock =3D ptp_clock_register(&ptp->info, &priv->pdev->dev); + + if (IS_ERR(ptp->clock)) { + dev_err(&priv->pdev->dev, "PTP clock registration failed\n"); + err =3D PTR_ERR(ptp->clock); + goto free_ptp; + } + + ptp->priv =3D priv; + return 0; + +free_ptp: + kfree(ptp); + priv->ptp =3D NULL; + return err; +} + +static void __maybe_unused gve_ptp_release(struct gve_priv *priv) +{ + struct gve_ptp *ptp =3D priv->ptp; + + if (!ptp) + return; + + if (ptp->clock) + ptp_clock_unregister(ptp->clock); + + kfree(ptp); + priv->ptp =3D NULL; +} --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 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 5DFF51EB2F for ; Sat, 17 May 2025 00:11:26 +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=1747440688; cv=none; b=hRu030f3AgqhxGBiSReutiY+m6tYBkC8HTL/s9RpT2BlSx3F2t++rUgKqHcttdNB0xz3CV/2A1j0YJVCx2Coc3Dq3h+DNqY67R5hHXoQc0Pfpm8+6nxR7fL1ddobeBsnX5Big0rFPrpW5gyD0iPDDI+OB4pOB6+Iw4ImvduwGyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440688; c=relaxed/simple; bh=pUkIgWxELqN/4Z0VIMy/NGCk7J2R96jLJthyFq/VFPU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gZTNFxAMqAR8sbBfDXMELjAC8IozhfQoBZBHo1n50tgc0eZa+5Wi3SERbazYet9WrQeJDoAUtCRoDVUzm3b8jY/at4GB3kfoJKFJ/xFfEQApX4YlLsuF7le8jYz9IDGhGiZA0Pf/XPlkFwon/4FTBjgmoOiNeQ3KQcupTBgMSOY= 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=cEzI7JSL; 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="cEzI7JSL" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b26fa2cac30so208597a12.2 for ; Fri, 16 May 2025 17:11:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440686; x=1748045486; 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=Ke631uMsz4FxTcxejSllZpYccC7Ldi0GA+ipIAqVNM0=; b=cEzI7JSLKiRJkPb75ISEfM7Dm3d/rAu+twMeC4kNH/R7gR4ODX/0MtuGfrNSkt2HMy R+FuhDSAExAn2EdUDEwFUB1urd7m6xjqOeB+L1KL1M3gx67xCyP+RJE9IPnXA9RmmDiu PIsBmFdSCebVDzmeKdeDNjfb53aqlmJzFsv2/4sb8zOkGsZy/VkbSpcjgTzJlfWNR40O LToJm5EjgnqOLBbXVJo5iAwj3GvuhL78+wWPnwSNdh92eUbunCb5k9E+QV1MPDNFWMaP uAt4E4vGsv5E/sr36Qbpkue9WQ76E+3tV+PyVTUmToLRbovjFM91foaJX/rc9y3LxotV /X7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440686; x=1748045486; 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=Ke631uMsz4FxTcxejSllZpYccC7Ldi0GA+ipIAqVNM0=; b=tdUE+MihD+kIbs0wKC0XZl+0Ft5vHkb71AdZhEabfj+Em0q9iWcUii5BisRPUDf2AL mUqKTCnxsk8K6wj4z0d6zkDDhZNUbB3HjT9zDwwohVlx21xdzz3XybZ+icYdpSE553kM mN7elIU2w6Zl7e/6KtM+T5RjGSd5aw4gV/GPif2lecwFESh/TMqlVb+3ui7SADpLop5j btl5CifxwqqaSOLxu9CAm+Nobc0B+5Vz8QwFwl3rmQOn8znnEJW5nmOEWK4s9zv5F9pC QGKmeTKg7eCCOL9XTLFsTcDIy+m2cvdZPFKkIN3ABBRAtJdda1/YtY0kFewSMJMXytkU kviQ== X-Forwarded-Encrypted: i=1; AJvYcCVriW8sNq7oURIyTUO0yJeO+S0EzticQwtiHTIJgK0Y0JjphvPdpD6Doqq1RSP60cPI6zPIRIpEnYAK0Cg=@vger.kernel.org X-Gm-Message-State: AOJu0YyXt/fyUg+uNPSv10DAhTMeUwJGKLOC/YYCQCcuexzIh65Oduvo gUJlQpkjXJtTNTp7tGMCpKU14oChAMgWBO2yHd5Aws04sTyTIT4Gj6F7AokRF9FDtJZhCq/x/IJ IS1P+seQ2OiJS5sHtvO99yjHsYQ== X-Google-Smtp-Source: AGHT+IFFSeP+EFxGhCUTGTd+z6GhHDOBz2BS1L+sJdSr1pZDWHaN+JTOOP/U5x0hxRX4rjtNCSnPqqlfSkZGB7horA== X-Received: from pfvf8.prod.google.com ([2002:a05:6a00:1ac8:b0:741:cbad:dafb]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7d9b:b0:1f5:8e33:c417 with SMTP id adf61e73a8af0-2170cb051b7mr6690239637.2.1747440685556; Fri, 16 May 2025 17:11:25 -0700 (PDT) Date: Sat, 17 May 2025 00:11:06 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-5-hramamurthy@google.com> Subject: [PATCH net-next v2 4/8] gve: Add adminq lock for queues creation and destruction From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ziwei Xiao Adminq commands for queues creation and destruction were not consistently protected by the driver's adminq_lock. This was previously benign as these operations were always initiated from contexts holding kernel-level locks (e.g., rtnl_lock, netdev_lock), which provided serialization. Upcoming PTP aux_work will issue adminq commands directly from the driver to read the NIC clock, without such kernel lock protection. To prevent race conditions with this new PTP work, this patch ensures the adminq_lock is held during queues creation and destruction. Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- Changes in v2: - Send this patch together with the rx timestamping patches to net-next instead of sending it to net (Jakub Kicinski) - Remove the unnecessary cleanup (Jakub Kicinski) --- drivers/net/ethernet/google/gve/gve_adminq.c | 47 +++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index f57913a673b4..a0cc05a9eefc 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -463,6 +463,8 @@ static int gve_adminq_kick_and_wait(struct gve_priv *pr= iv) int tail, head; int i; =20 + lockdep_assert_held(&priv->adminq_lock); + tail =3D ioread32be(&priv->reg_bar0->adminq_event_counter); head =3D priv->adminq_prod_cnt; =20 @@ -488,9 +490,6 @@ static int gve_adminq_kick_and_wait(struct gve_priv *pr= iv) return 0; } =20 -/* This function is not threadsafe - the caller is responsible for any - * necessary locks. - */ static int gve_adminq_issue_cmd(struct gve_priv *priv, union gve_adminq_command *cmd_orig) { @@ -498,6 +497,8 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, u32 opcode; u32 tail; =20 + lockdep_assert_held(&priv->adminq_lock); + tail =3D ioread32be(&priv->reg_bar0->adminq_event_counter); =20 // Check if next command will overflow the buffer. @@ -733,13 +734,19 @@ int gve_adminq_create_tx_queues(struct gve_priv *priv= , u32 start_id, u32 num_que int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D start_id; i < start_id + num_queues; i++) { err =3D gve_adminq_create_tx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static void gve_adminq_get_create_rx_queue_cmd(struct gve_priv *priv, @@ -812,13 +819,19 @@ int gve_adminq_create_rx_queues(struct gve_priv *priv= , u32 num_queues) int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D 0; i < num_queues; i++) { err =3D gve_adminq_create_rx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static int gve_adminq_destroy_tx_queue(struct gve_priv *priv, u32 queue_in= dex) @@ -844,13 +857,19 @@ int gve_adminq_destroy_tx_queues(struct gve_priv *pri= v, u32 start_id, u32 num_qu int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D start_id; i < start_id + num_queues; i++) { err =3D gve_adminq_destroy_tx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static void gve_adminq_make_destroy_rx_queue_cmd(union gve_adminq_command = *cmd, @@ -885,13 +904,19 @@ int gve_adminq_destroy_rx_queues(struct gve_priv *pri= v, u32 num_queues) int err; int i; =20 + mutex_lock(&priv->adminq_lock); + for (i =3D 0; i < num_queues; i++) { err =3D gve_adminq_destroy_rx_queue(priv, i); if (err) - return err; + goto out; } =20 - return gve_adminq_kick_and_wait(priv); + err =3D gve_adminq_kick_and_wait(priv); + +out: + mutex_unlock(&priv->adminq_lock); + return err; } =20 static void gve_set_default_desc_cnt(struct gve_priv *priv, --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2E4F10F9 for ; Sat, 17 May 2025 00:11:27 +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=1747440689; cv=none; b=jziFpenM2sYGm9Jaep3ZBO6oj/IyKGNcRYmUn2mzZP2TMgnckcW2Sn73a/1Cs/VjmKbLhdmmgJscLrDRt7lqm1I2PZYmuXdWgLtJmg7mKC6Wl3CJojdoqUHjp/gERSJiXMs4tky0HXhzxx0/XE+Ym5KmUQoNwvJzhP7FG1pYqlY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440689; c=relaxed/simple; bh=AhXgpM261VQpIZoxXtPxuaDrw2Ht6vwOSCzEBx5Niag=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=REAW3/ouuxpCB6iBVtq6KXVi248iy8649m92v0LTBhuxc2zKSwyikupWaEIek9wLToKAqmA9pkcDBQOKBA9Zi2vEhmOM8RloGUdX35Ef6cIRnCfK9KmYoxyXLOOKJPQU+nz45DMYe4CR3LqijOCa9kHynd5U8oGnWgpoJsHreWM= 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=gb5YiiQj; 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="gb5YiiQj" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7370e73f690so3067593b3a.3 for ; Fri, 16 May 2025 17:11:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440687; x=1748045487; 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=1Z8KqdOIkNMJPBrFgrV7WmG9+iQCivyieWnYdeOcses=; b=gb5YiiQjuNT6i+FVg9+kJ8JVFsSs+HGveKWwz51c6rMUSWfUhpBVViFEvA+eJpKIUJ kPSBac0RD7tjaAHn+X6IiCGzAlTHMYeNEhi9rByA64oj+5QjCqSBj40UukPf7vmPfZHm OOd+XmRX9Gafi+SQXyQARx3ASRoOH7c/aOS1lxFpnHLKQUfTFqBANWMzHRmlT9s8WLaw JQt9nEJbAi/PWtnPGAEzwZFVfzzH34pVjWsbtYUWW2RNx9Wn6D/8d+u3OnNbUFE+APVA QAgF4yTlzu2UKV8DmItBU3X+Ld6hG2qaJRdY59TkEzuEfCDO7T6qHVR+dqI7bvmpTA2D AOuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440687; x=1748045487; 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=1Z8KqdOIkNMJPBrFgrV7WmG9+iQCivyieWnYdeOcses=; b=JDD1LicLngzdC8LJhEav7HhzBBLMCbL68jte4tNzqlCPOs17ho4tC6X7pajhMa8B/T tXXVkqDeKgbu0Niy/yb928md07RSvVpq5/bgCira9vYKsg5M/Re8hSZOGX8tC4eNcYrS pIRxwjGyU0fhF/5bdgidK24LUt5d0OxTmw2Ys94vcyalzoFeV3UX5HZPviRK/yqshzaP mOyOpbsHYsI8nHQHh0MwUja1MMR6ZH5Utt3DhXTb34UIA2I7bfjXj6Ep/g0hmZ4XtaJF jlUcLpwu/KfW8zRYMhOOBN54hB0+NGputqMRFHS6BjUWL0te0fWa8zSOkS0un2SsCDIJ EVBA== X-Forwarded-Encrypted: i=1; AJvYcCWm3dc/4K6Ro0pxcr55Rb9uqu05HJtfszNvW25FSs86UIujI8WGXds/TXOitdZlCkGLGIIJEuBf+wTHTNM=@vger.kernel.org X-Gm-Message-State: AOJu0YzcQgat9R/xu8m9A6qFMX1GxxJ4qdSK/paPnzi9JpQdUBkGvQuh FGszPncyJ0UZa350JsoAIPecrsDkZe7KOzFBF18me6qpDbETNVM9omRNd6hZaGFnYbd5pudvf9y 5a9ApRaJyvtrdK7JBqgzs3iD47w== X-Google-Smtp-Source: AGHT+IGE9S++s+pBNwGLi0OLLvvNq+88AHD4qXWXzRJzGAGWMrh7HuTC9VrqmZeW50Y5M0eRiwC+Oo7248yvwXi1CQ== X-Received: from pfbdf3.prod.google.com ([2002:a05:6a00:4703:b0:740:b399:3042]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:91d4:b0:736:457b:9858 with SMTP id d2e1a72fcca58-742a97c9d2bmr6246707b3a.10.1747440687165; Fri, 16 May 2025 17:11:27 -0700 (PDT) Date: Sat, 17 May 2025 00:11:07 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-6-hramamurthy@google.com> Subject: [PATCH net-next v2 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 v2: - Utilize the ptp's aux_work instead of delayed_work (Jakub Kicinski, Vadim Fedorenko) --- drivers/net/ethernet/google/gve/gve.h | 15 +++++ drivers/net/ethernet/google/gve/gve_ptp.c | 77 ++++++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 8d2aa654fd4c..97054b272e40 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -882,6 +882,9 @@ struct gve_priv { /* True if the device supports reading the nic clock */ bool nic_timestamp_supported; struct gve_ptp *ptp; + struct gve_nic_ts_report *nic_ts_report; + dma_addr_t nic_ts_report_bus; + u64 last_sync_nic_counter; /* Clock counter from last NIC TS report */ }; =20 enum gve_service_task_flags_bit { @@ -1261,6 +1264,18 @@ int gve_del_flow_rule(struct gve_priv *priv, struct = ethtool_rxnfc *cmd); int gve_flow_rules_reset(struct gve_priv *priv); /* RSS config */ int gve_init_rss_config(struct gve_priv *priv, u16 num_queues); +/* PTP and timestamping */ +#if IS_ENABLED(CONFIG_PTP_1588_CLOCK) +int gve_init_clock(struct gve_priv *priv); +void gve_teardown_clock(struct gve_priv *priv); +#else /* CONFIG_PTP_1588_CLOCK */ +static inline int gve_init_clock(struct gve_priv *priv) +{ + return -EOPNOTSUPP; +} + +static inline void gve_teardown_clock(struct gve_priv *priv) { } +#endif /* CONFIG_PTP_1588_CLOCK */ /* report stats handling */ void gve_handle_report_stats(struct gve_priv *priv); /* exported by ethtool.c */ diff --git a/drivers/net/ethernet/google/gve/gve_ptp.c b/drivers/net/ethern= et/google/gve/gve_ptp.c index 293f8dd49afe..b6e18ad20fa9 100644 --- a/drivers/net/ethernet/google/gve/gve_ptp.c +++ b/drivers/net/ethernet/google/gve/gve_ptp.c @@ -5,13 +5,52 @@ */ =20 #include "gve.h" +#include "gve_adminq.h" + +/* Interval to schedule a nic timestamp calibration, 250ms. */ +#define GVE_NIC_TS_SYNC_INTERVAL_MS 250 + +/* Read the nic timestamp from hardware via the admin queue. */ +static int gve_clock_nic_ts_read(struct gve_priv *priv) +{ + u64 nic_raw; + int err; + + err =3D gve_adminq_report_nic_ts(priv, priv->nic_ts_report_bus); + if (err) + return err; + + nic_raw =3D be64_to_cpu(priv->nic_ts_report->nic_timestamp); + WRITE_ONCE(priv->last_sync_nic_counter, nic_raw); + + return 0; +} + +static long gve_ptp_do_aux_work(struct ptp_clock_info *info) +{ + const struct gve_ptp *ptp =3D container_of(info, struct gve_ptp, info); + struct gve_priv *priv =3D ptp->priv; + int err; + + if (gve_get_reset_in_progress(priv) || !gve_get_admin_queue_ok(priv)) + goto out; + + err =3D gve_clock_nic_ts_read(priv); + if (err && net_ratelimit()) + dev_err(&priv->pdev->dev, + "%s read err %d\n", __func__, err); + +out: + return msecs_to_jiffies(GVE_NIC_TS_SYNC_INTERVAL_MS); +} =20 static const struct ptp_clock_info gve_ptp_caps =3D { .owner =3D THIS_MODULE, .name =3D "gve clock", + .do_aux_work =3D gve_ptp_do_aux_work, }; =20 -static int __maybe_unused gve_ptp_init(struct gve_priv *priv) +static int gve_ptp_init(struct gve_priv *priv) { struct gve_ptp *ptp; int err; @@ -44,7 +83,29 @@ static int __maybe_unused gve_ptp_init(struct gve_priv *= priv) return err; } =20 -static void __maybe_unused gve_ptp_release(struct gve_priv *priv) +int gve_init_clock(struct gve_priv *priv) +{ + int err; + + err =3D gve_ptp_init(priv); + if (err) + return err; + + priv->nic_ts_report =3D + dma_alloc_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + &priv->nic_ts_report_bus, + GFP_KERNEL); + if (!priv->nic_ts_report) { + dev_err(&priv->pdev->dev, "%s dma alloc error\n", __func__); + return -ENOMEM; + } + + ptp_schedule_worker(priv->ptp->clock, 0); + return 0; +} + +static void gve_ptp_release(struct gve_priv *priv) { struct gve_ptp *ptp =3D priv->ptp; =20 @@ -57,3 +118,15 @@ static void __maybe_unused gve_ptp_release(struct gve_p= riv *priv) kfree(ptp); priv->ptp =3D NULL; } + +void gve_teardown_clock(struct gve_priv *priv) +{ + gve_ptp_release(priv); + + if (priv->nic_ts_report) { + dma_free_coherent(&priv->pdev->dev, + sizeof(struct gve_nic_ts_report), + priv->nic_ts_report, priv->nic_ts_report_bus); + priv->nic_ts_report =3D NULL; + } +} --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80C986F073 for ; Sat, 17 May 2025 00:11:29 +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=1747440691; cv=none; b=EDRlXt0i5P9Fj/lCWWraY1TicKGa2XarR1a1/UZNj8WuAuNVdTgI89m9YuJONZYtNR1lcV/INvryzC/4ETQMSrr7PT6dF1mgSy2MyQ5dyn5fBU3pSMTUUcRc5v4U1GIVaE6lQ1WXavcv6FA1dMvBARi+CmDtd5jykS+crzaFw5g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440691; c=relaxed/simple; bh=4rglfxQ8e43NAo8sjfzdrwp9gt2rF2n/CmwotQFqKo4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=S8TsSDMpNpZt1P6y24BEPhaZ5TvkIyEgT15GXKImUELHdbgFMchW4RdJCFO06rHMX2H2SNbJQoxIrqNcR49YV48Maalf6yVu6XOoY7dVZbvp+wxM2oganIvcWhCs7IrZKjCVwV5m9eaynpz/m3a1K6tHvD7ZmzYzYT8WoS7/+ls= 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=Dj3RgLnq; 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="Dj3RgLnq" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-30e6980471cso1796811a91.1 for ; Fri, 16 May 2025 17:11:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440689; x=1748045489; 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=dMvnnMEFZ5dqB3r/UXxZSIBB69p1DCz7ZEgCufDQ4uk=; b=Dj3RgLnqkd6gvb2Okb0oXSvsVCF1y5nk8ThOsLXlUrp9TnN4Shapt16KB2IUVx9PzM MLtWPMy0pnng1HaGOTANhiZOxwJPi0aJ4d56giNGwpqcwqSZQ09RhqLyT/v3V86Sqo2O LD13ZYc4+qpMA7cfIs5hJGtTB6VB2Hqutxs3l6yDw4iaKkAgaZsIpdNduVT9QCwpMDDF D/5SWkuXCbKNfzjWI8/eajKDAIbz7mNdbcSyisjmrWpkVELseTcSYFUaRNAIrqgBsB/I ZtHiP5xK6lF2BAlBO/0Fl8U564/lRbhDnO1ZVSd++EUW9guYtAchxIh51/MWkVhpYZHs eIbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440689; x=1748045489; 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=dMvnnMEFZ5dqB3r/UXxZSIBB69p1DCz7ZEgCufDQ4uk=; b=fhVswgHAZtuNF3aPHhLhmVAxq3LjrHDy3C8I8ScA37H9LyI9FOhcFJgOyDl+5xfqAS bDx/ILacnQxgo25er2NdS/AwqRqfahuYFBb160f4UR6zGDZYQL7g9s4Dx8JoBgWKcmLT 1eZUivhYItyKhsXfn1KPisA2q6rSIGhmyU0Ev8FRHkHLp7LmkxQIJFy75VuNWJ1Beykg IIdXoZDVd/MuZmtYOUIW04C6SYjecCfO3d8zqiEd9UGitCRZiqRTuCLQb5UNK2q1TUZb 1kZfTDMjt+DAMzWVqw3xh+Lmdar3E2Pqzo0QpV3+VqKnb7CHoSrSv8rxb0d3DX/okVn0 a24w== X-Forwarded-Encrypted: i=1; AJvYcCXaV7KQi8CKl9+/2TgopPK623/z90Ycb/t3hfQJi6WPi+0HVk1tuZsPwYN3brXwXfUVySYUCBn1KzHqB5E=@vger.kernel.org X-Gm-Message-State: AOJu0YwL7XF5l6vlUl+463Hz2E0cHf4FylLBlYNRsmthMnNcg8pBwera HlBcviPSvUzC9h9H5Xdsiy1h05ZkRhAvDWRdsnGW8cto2qihXd+QNrMRPBCFOq+cpMfe9rW64If 9IHYPk9fDVxhD2nb/bum0H6ebUA== X-Google-Smtp-Source: AGHT+IG46JxU0jfSTXvusA4Eomfk59BlIHtg11FHTnd9jKqASYShcps1JjwfGgMvZcQtcixOG3gO82yT0GIGNAewiw== X-Received: from pjbqn7.prod.google.com ([2002:a17:90b:3d47:b0:30a:9cb5:7622]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:c105:b0:305:2d68:8d39 with SMTP id 98e67ed59e1d1-30e7d5221efmr9137782a91.12.1747440688761; Fri, 16 May 2025 17:11:28 -0700 (PDT) Date: Sat, 17 May 2025 00:11:08 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-7-hramamurthy@google.com> Subject: [PATCH net-next v2 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 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..c03c3741e0d4 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) +{ + s64 last_read =3D READ_ONCE(rx->gve->last_sync_nic_counter); + struct sk_buff *skb =3D rx->ctx.skb_head; + u32 low =3D (u32)last_read; + s32 diff =3D hwts - low; + + skb_hwtstamps(skb)->hwtstamp =3D ns_to_ktime(last_read + diff); +} + static void gve_rx_free_skb(struct napi_struct *napi, struct gve_rx_ring *= rx) { if (!rx->ctx.skb_head) --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 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 1CE3435947 for ; Sat, 17 May 2025 00:11:30 +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=1747440692; cv=none; b=m6eVw3Xx9nt48guBAqy7y2ATuThTPeR310XR6wcMU3fMkg40gYmbG9Xl7+TlbmJyKNdd1Fo+qU1+xkoxmR+J90Bl9DzVIRswbXNDhVhuF9oc+c+cGRMgW81jBnLXwuxS97Lq3HJcS1aVj1whK2UuzivZR1Zo4A6npsqf712zhNU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440692; c=relaxed/simple; bh=Ln67e2fXdHeRD0QQX4x4O0sduhktMs8m3jcBjEN8FE0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=mktW1voPoaGBJZi//4k9fpERGc6cGguJ1O9oEnyTqsU2PmUYlu2g6a0l87fjDXvcDKSn6Y2wiJpDJ+ElbKjpc7gEAgqYmpVXzYeDYA3xZUnv2tWNhibV2mrQoWRCEQ3V340iKbztn78ubC+bSvDtnKRPKxOhCc4K2wSzFfbl4gI= 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=rgClfQfq; 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="rgClfQfq" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b269789425bso2740917a12.0 for ; Fri, 16 May 2025 17:11:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440690; x=1748045490; 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=Fr/dcsS88YzwpSwebtUZRVO7/ET/zcv+hWMSHe2dz5w=; b=rgClfQfqNO9jyAVS/mwQ6nrdQy6MmhD9hUVj/NapFRpovx2ws9WI72uo0mpJQp0h2j Jue0nIp1CRRz7sd7awSNgMLhboGg9YJYcYRFCTg8BLiac6AKXkklAY5mVIRF3OpsUQ6g cT5Ev4P9M3jNDY8ku0GiTJuOHZuwmegDwMgncAG7+cLQbDG7hTRKBDueqR75+FshFdYR Pu+MZLSUq2BxrEo9vmaESArm08PdADej0qP4cEL/z13ip9vbQ+RgloqxLWr/JktdZBLB //K7HB32ChXncWXlqTu3/8OdL+5bYeK8K7aZQGp19PblkLuohN4x8tq1C9aIDH5uugRY VkbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440690; x=1748045490; 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=Fr/dcsS88YzwpSwebtUZRVO7/ET/zcv+hWMSHe2dz5w=; b=UNdDSYz3+jG1hZnBpeJ/yYG1iyZFWONy2HgVvPEyKYzN8dT9XIpLYuf7kdMB5AuBeX 0GRjm1LZ2S7qVwinluVo+w7+FM502WXFfLVZPx/l52xpwiQVSGcxDP/thJMvApZbdDcv 3Pi1KcganDLIbI7k79ih1k9sP8hqLAC7jFUuJU7EXNVC6wscLpQG9inLUgETKeH84CuF 23GcTN02BpLuDjiWRCej9jK44YoR8Jn+xYtrkCqtbh0ijLr+fLF3abmNsZ5x0jY5Ss3c CwN/EhgoF1erpqGitzz1pcGIlCT7BI0N2YvxKT5mbelffW+nnHrKfx26CBWpNmkzpbzA Fnmw== X-Forwarded-Encrypted: i=1; AJvYcCVXXrrFGUAQFexFYvnEi3wk7+IiHBcrtMRGZB8PkSJy0SKV+RXC08vSOL7mucoWTyTuru6UPCQ/FyEvwF4=@vger.kernel.org X-Gm-Message-State: AOJu0YzEngReCThFHBH6bIuarP4XVllYxFePqyIOgqh3C6X6zJ7bSL0m r6ebfTOuQ6hbtFQjw0hVfEThn+ekLLuw8zcew9DiB09zK0lfOQb9/UxDilIT5xH8+g35f7UMe0m pSp7DJmAs4aJaEckIEzkhmcCzrg== X-Google-Smtp-Source: AGHT+IEN40QpGn9u5LekkCRqv9FmXtRYXCG9Bz3e/b18f0K/Mhkbd7WLCZvTIirTXcfs8oSd/4a4OrI6ZsTegAU7mA== X-Received: from pfdf22.prod.google.com ([2002:aa7:8b16:0:b0:742:a71a:ea85]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:12c3:b0:216:1476:f54 with SMTP id adf61e73a8af0-216219ee254mr7877863637.38.1747440690340; Fri, 16 May 2025 17:11:30 -0700 (PDT) Date: Sat, 17 May 2025 00:11:09 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-8-hramamurthy@google.com> Subject: [PATCH net-next v2 7/8] gve: Add support for SIOC[GS]HWTSTAMP IOCTLs 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 Add support for the SIOCSHWTSTAMP and SIOCGHWTSTAMP IOCTL methods using gve_get_ts_config and gve_set_ts_config. 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 --- drivers/net/ethernet/google/gve/gve.h | 2 + .../net/ethernet/google/gve/gve_desc_dqo.h | 3 +- drivers/net/ethernet/google/gve/gve_main.c | 47 +++++++++++++++++++ drivers/net/ethernet/google/gve/gve_rx_dqo.c | 5 +- 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 97054b272e40..a812612c52ba 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -882,6 +883,7 @@ struct gve_priv { /* True if the device supports reading the nic clock */ bool nic_timestamp_supported; struct gve_ptp *ptp; + struct kernel_hwtstamp_config ts_config; struct gve_nic_ts_report *nic_ts_report; dma_addr_t nic_ts_report_bus; u64 last_sync_nic_counter; /* Clock counter from last NIC TS report */ diff --git a/drivers/net/ethernet/google/gve/gve_desc_dqo.h b/drivers/net/e= thernet/google/gve/gve_desc_dqo.h index f79cd0591110..d17da841b5a0 100644 --- a/drivers/net/ethernet/google/gve/gve_desc_dqo.h +++ b/drivers/net/ethernet/google/gve/gve_desc_dqo.h @@ -247,7 +247,8 @@ struct gve_rx_compl_desc_dqo { }; __le32 hash; __le32 reserved6; - __le64 reserved7; + __le32 reserved7; + __le32 ts; /* timestamp in nanosecs */ } __packed; =20 static_assert(sizeof(struct gve_rx_compl_desc_dqo) =3D=3D 32); diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index e1ffbd561fac..b5234ef9c6a0 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) { + dev_err(&priv->pdev->dev, "TX timestamping is not supported\n"); + 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) { + dev_err(&priv->pdev->dev, + "Failed to initialize GVE clock\n"); + 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 c03c3741e0d4..15d3c414b33c 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) { s64 last_read =3D READ_ONCE(rx->gve->last_sync_nic_counter); struct sk_buff *skb =3D rx->ctx.skb_head; @@ -790,6 +790,9 @@ static int gve_rx_complete_skb(struct gve_rx_ring *rx, = struct napi_struct *napi, if (feat & NETIF_F_RXCSUM) gve_rx_skb_csum(rx->ctx.skb_head, desc, ptype); =20 + if (rx->gve->ts_config.rx_filter =3D=3D HWTSTAMP_FILTER_ALL) + gve_rx_skb_hwtstamp(rx, le32_to_cpu(desc->ts)); + /* RSC packets must set gso_size otherwise the TCP stack will complain * that packets are larger than MTU. */ --=20 2.49.0.1112.g889b7c5bd8-goog From nobody Fri Dec 19 17:19:14 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 B52C913DBA0 for ; Sat, 17 May 2025 00:11:32 +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=1747440694; cv=none; b=J5gceW8P6QBqX8mSD6sxTiQDOd3xe14PoN/ASKJZZF9bED9+cON9EqEj4lFVe4kgakMM2+QVKnAczAE4TU1Rwso2P4MiquJfbfK2/8Ec4tW7q+i2D5BQOeYnms97vJDAn9fGb+s0NwhSXCTlHrHwcLIlBgOtvguYBHc5WVUHDIg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747440694; c=relaxed/simple; bh=S/iv0GbiuRni+Nolcj2bw+f/wWk19KQJAIutNB+SyIk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UlrYnoofwhggNR/lyS6Ft3v/2hGk643JYvWdTIr9cfpm2F1hJ+ZSRKgFW5TJB0lFqLarbsbOXvP0suTSLQz839MpNRujRQD+EVYw8WwL9D1m4UGriASDZEo7kZRiiBK5GHztJj0EN6rOvs1ziLqnYPUH90CUBLsDrLFZy90UK1A= 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=tPOLRgdR; 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="tPOLRgdR" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b26fa2cac30so208652a12.2 for ; Fri, 16 May 2025 17:11:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747440692; x=1748045492; 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=cr07PiM+lZeHxmiRK0zagShTWrhpMKb6x5MbT1urZAE=; b=tPOLRgdRVBIU8Bcztit/njc31a8MnrMtuipn7iFO9MpSKAwMo7SpAlsT7Wc036kv6j sOQWRpyvSsASYf3I+EX4i4XUCaLswLQdtdcRz4lSdaFknrNiVmOn8K5nZ464hh8GeWDD WQPLs2LK1OPaBqUiCpiUcKgXm2Y3wilL838tZgCF00AbvBGhl6wXUTq0yEwSZukj3HoC +VM7bk3ZGKkXnOYi5L8PCQvO6GXaVNte8sO4O8hj3vCwoYZ5fDWsBURsGV9P89yNSfjO Z7KOyM/QY49RePOVmRbxOEfMmot9tg7hh1T9VgpHemzfEAZUpVBn86H1YCoPggDxlhmm 2Wlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747440692; x=1748045492; 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=cr07PiM+lZeHxmiRK0zagShTWrhpMKb6x5MbT1urZAE=; b=W5J07PziXuqMpKKgfnXnhWv1Ts8wehj7ePE+KsuFVnmOPPKgLTGn3laQ15o0A7hUEI BfTZTKtM1dUfhZktKejsRnUmu6C+k6lpBeHkDlT6a/EQ26z4dFwmUA+GoR263J3xHLPE Pi/vfg9lASGprOEfb8YGX+k3ICqzQ7Th303H0SB7yGBzK0WjCJCZ0HyrShGyYfGmXyFt A4Yw7mQEwK1U+LEMT0Ysc/LsEhPFU5J76D2C59uKwVZ+WxlAzRmZmGZmOAuu3aGNNkzV PybMVlgtQ2iJDrB432HbERr8I0nIzZM41hoVPMgnFOud5gjq8ortqJA8wKl+4UKnzeS2 w4KA== X-Forwarded-Encrypted: i=1; AJvYcCXqCtWymFYwfGHX+IrcXfW/csHPn8md+fmuu8CzrM5xbZ/c+HUySg5QtfVMlOPnZmZwsQvk4K1K9ha+cio=@vger.kernel.org X-Gm-Message-State: AOJu0YxrNCoWjXr8Q5/vvgMFw3Md4HfSDRV5x3z5YpT/1Oa46TWx6m1p O+nAvyAosE8PB7IIruMTpKYsV6omKQ7TcF6Nny06vD/5D7AWUcEW02lkIWt77UNHwHPnOsi/g8B lss/ArmsNgGogH5OrtVB7vg7Gew== X-Google-Smtp-Source: AGHT+IE1AOpts6byPsyCEwN2aepM9ordZf/5sIwXYW6qwusQM0XbdD1U0V9/r7EWUMNGOs4AkPlvasYx00VQ0MCCUA== X-Received: from pjm6.prod.google.com ([2002:a17:90b:2fc6:b0:301:b354:8d63]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3a45:b0:1f5:8dea:bb93 with SMTP id adf61e73a8af0-2170cb07df4mr7684248637.7.1747440691899; Fri, 16 May 2025 17:11:31 -0700 (PDT) Date: Sat, 17 May 2025 00:11:10 +0000 In-Reply-To: <20250517001110.183077-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: <20250517001110.183077-1-hramamurthy@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250517001110.183077-9-hramamurthy@google.com> Subject: [PATCH net-next v2 8/8] gve: Advertise support for rx hardware timestamping From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jeroendb@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, willemb@google.com, ziweixiao@google.com, pkaligineedi@google.com, yyd@google.com, joshwash@google.com, shailend@google.com, linux@treblig.org, thostet@google.com, jfraker@google.com, richardcochran@gmail.com, jdamato@fastly.com, vadim.fedorenko@linux.dev, horms@kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Fraker Expand the get_ts_info ethtool handler with the new gve_get_ts_info which advertises support for rx hardware timestamping. With this patch, the driver now fully supports rx hardware timestamping. Signed-off-by: John Fraker Signed-off-by: Ziwei Xiao Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_ethtool.c | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/et= hernet/google/gve/gve_ethtool.c index d0628e25a82d..043d1959fb9d 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -929,6 +929,24 @@ static int gve_set_rxfh(struct net_device *netdev, str= uct ethtool_rxfh_param *rx return 0; } =20 +static int gve_get_ts_info(struct net_device *netdev, + struct kernel_ethtool_ts_info *info) +{ + struct gve_priv *priv =3D netdev_priv(netdev); + + ethtool_op_get_ts_info(netdev, info); + + if (priv->nic_timestamp_supported) { + info->so_timestamping |=3D SOF_TIMESTAMPING_RX_HARDWARE | + SOF_TIMESTAMPING_RAW_HARDWARE; + + info->rx_filters |=3D BIT(HWTSTAMP_FILTER_NONE) | + BIT(HWTSTAMP_FILTER_ALL); + } + + return 0; +} + const struct ethtool_ops gve_ethtool_ops =3D { .supported_coalesce_params =3D ETHTOOL_COALESCE_USECS, .supported_ring_params =3D ETHTOOL_RING_USE_TCP_DATA_SPLIT, @@ -957,5 +975,5 @@ const struct ethtool_ops gve_ethtool_ops =3D { .get_priv_flags =3D gve_get_priv_flags, .set_priv_flags =3D gve_set_priv_flags, .get_link_ksettings =3D gve_get_link_ksettings, - .get_ts_info =3D ethtool_op_get_ts_info, + .get_ts_info =3D gve_get_ts_info, }; --=20 2.49.0.1112.g889b7c5bd8-goog