From nobody Tue Jun 16 19:33:07 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 52C1415A86D for ; Sat, 25 Apr 2026 00:24:56 +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=1777076697; cv=none; b=Z/WvQ+4rKxjr6wPDbRmbFMsCkr6wxxebC0TJv4ffERbz9zNMwiPL+ZID568Ai06k8kUzpaGABIDdvBDxwunMzWa3P5Z8k2jEeevmZOUFE7cjPhqevXdb2LIlgLOB5ot1QzPdMW/sqlQ5mce7RBNFqQOZMkDm/oT50OTxddLvq8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777076697; c=relaxed/simple; bh=Mjnx1s3bsqC9FAzihiRv4foFXTmL4rKmWuq5XvBiL6Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YgYUEq3rckDejiJjcswWlmWn+eHC8zVtEssqx6/GvQ7YwD+kMJN8ggiBYvf1wkauV9le+79VLTQfyis/MAgaN4W7xdXylvDYmmGpKMiBzCVMQvhEd1JB4vSvblIZlieEu3lpWxmVfnNRuxPAAvBus8Q583iWfWJhDDok6Vi5fMc= 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=UMAAUJQq; 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="UMAAUJQq" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2b24cd2e2b3so77204565ad.0 for ; Fri, 24 Apr 2026 17:24:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777076696; x=1777681496; 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=Waoun8sqMnhJduShdptqSPbzHIpwQYFL4W4pABJXnK0=; b=UMAAUJQqAOkxqp+kAKZTQIuprJQhsD4ElGilIsjAdyiWExl6AFkH1kFcRpeEWysxOw EEAihnhC2ZHtKAKdB5MKWbTH2IyMerQq1Ymvfj1Ocfzx1RbKD5TGIajTGqchEkmwmCRO eYYsK2ry8Y1/8KefYJI6Y7Iu+PMvXdJTWC1Gm1vLQo4TAqQktHPrTtAST2Y/JIBpmXq2 rzWRn0iu0BbmgOt3xlXepcrp0/FV03jfr4RJxeEGcA376sc6xAYTiFrk9KK5+iFgSDSA hOfQ2Mv110QI6PXEq4xnieuFMdKV8fjoCmOapSpCzzy6G3VMW4UeRbTijxuCktFNVhsS 1CSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777076696; x=1777681496; 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=Waoun8sqMnhJduShdptqSPbzHIpwQYFL4W4pABJXnK0=; b=Y1wA8/7lGJ0DdAVrg6yThSH776M9dXStgaUTX8o6pvwQcs6wElbQsR2nctGBDBb7Wj WVv1fHWeKgdWVPuqWDzEJb1VXbyW5RnaSbCKuOTXvKkjNHZA/w54LBiyUg3tDbU7QTeV sWOpCWXnnlh3axM/2GhYmLr4aEVa7TyV6//xIhVWf4ZZc84i1etk4i7hfMtkowTd9jRY uzrEX5jNYEE0pcsa8WCx8h8DfrG9kOscb1UUZ1pfzYt3e/h05VSWHIuiVUjJANtkZIEk KHjzns7WMxReNd54FZKK4dUIJuyKxrvXKf6yWYZfyqwycVP7+OiHMN8WYPTem/yxxO89 JpWA== X-Forwarded-Encrypted: i=1; AFNElJ+3Y2zQJvnzKkmehMQ7khMNsnFNBUMFWWt5H82A7xU2l3+pgPgz+7KGknwaQ4t2DAjJdTvYjV5EBN6usEw=@vger.kernel.org X-Gm-Message-State: AOJu0YwPDH7/9hdA7+MBs5OV4f+frq5SJEy9tEkgIs0fSaO/e1RK02L1 gd4yclLO0w1wPI3gusaONIOT6IZ/dyDH5xK7eQebzuqoQ6V3S4C2lXqHSTbhrLD5eoLx1VnrtTo XjmTK46y0rEgkn5QP1ulGqY9Upg== X-Received: from plbb16.prod.google.com ([2002:a17:903:c10:b0:2b2:49fe:d6db]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94b:b0:2a9:e8b:5326 with SMTP id d9443c01a7336-2b5f9f51e59mr333405275ad.23.1777076695413; Fri, 24 Apr 2026 17:24:55 -0700 (PDT) Date: Sat, 25 Apr 2026 00:24:47 +0000 In-Reply-To: <20260425002450.163421-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: <20260425002450.163421-1-hramamurthy@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260425002450.163421-2-hramamurthy@google.com> Subject: [PATCH net v2 1/4] gve: Add NULL pointer checks for per-queue statistics From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, willemb@google.com, maolson@google.com, nktgrg@google.com, jfraker@google.com, ziweixiao@google.com, jacob.e.keller@intel.com, pkaligineedi@google.com, shailend@google.com, jordanrhee@google.com, stable@vger.kernel.org, linux-kernel@vger.kernel.org, Debarghya Kundu , Pin-yen Lin Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Debarghya Kundu gve_get_[tx/rx]_queue_stats references the [tx/rx] null rings when the link is down. Add NULL pointer checks to guard this This was discovered by drivers/net/stats.py selftest. Cc: stable@vger.kernel.org Fixes: 2e5e0932dff5 ("gve: add support for basic queue stats") Signed-off-by: Debarghya Kundu Signed-off-by: Pin-yen Lin Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_main.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 424d973c97f2..ef00d9ca1643 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2746,9 +2746,13 @@ static void gve_get_rx_queue_stats(struct net_device= *dev, int idx, struct netdev_queue_stats_rx *rx_stats) { struct gve_priv *priv =3D netdev_priv(dev); - struct gve_rx_ring *rx =3D &priv->rx[idx]; + struct gve_rx_ring *rx; unsigned int start; =20 + if (!priv->rx) + return; + rx =3D &priv->rx[idx]; + do { start =3D u64_stats_fetch_begin(&rx->statss); rx_stats->packets =3D rx->rpackets; @@ -2762,9 +2766,13 @@ static void gve_get_tx_queue_stats(struct net_device= *dev, int idx, struct netdev_queue_stats_tx *tx_stats) { struct gve_priv *priv =3D netdev_priv(dev); - struct gve_tx_ring *tx =3D &priv->tx[idx]; + struct gve_tx_ring *tx; unsigned int start; =20 + if (!priv->tx) + return; + tx =3D &priv->tx[idx]; + do { start =3D u64_stats_fetch_begin(&tx->statss); tx_stats->packets =3D tx->pkt_done; --=20 2.54.0.545.g6539524ca2-goog From nobody Tue Jun 16 19:33:07 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 A1E4C1CAA78 for ; Sat, 25 Apr 2026 00:24:58 +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=1777076699; cv=none; b=dt3oGtDSbl6IL3XM0TRMQYc/yXZBtYX3/Ps5RmIe3Dyx8+D9KfVWGOG6U+nLuZgjF2/YsKazUtt0Z5skjo58IXgexAMqwcTUGiQdlvD8Gf28+BkU97/tVpD7HXHhdxFsk+XaPD0LUsyCDn+3B1OFGne+OOrxxGLh8IIEXX5cnXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777076699; c=relaxed/simple; bh=yekA/fLC52CZh9ofH4e0iJWuXm6tLedi58HlqbuGCuE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UT9ywlbcS/j2T/ZOQ+h9V6XMXhseowc3Rr2CBXHxNR2DDGXMlR3Uwr6Gwui8cF5PlyEAHuAj8ozFwQ18D9QYvxNnnndp7O5dH9s5rstxYq2LV3CilFpZhfyKRH7WyXBBJOGiPEKLZ/fJylg7HJAH5mODGBQakBxBkaCix4NPrc4= 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=YEPkCYZq; 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="YEPkCYZq" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2b4678c6171so83089575ad.1 for ; Fri, 24 Apr 2026 17:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777076698; x=1777681498; 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=4wiJYfQEx2I1gNyVCcAbOWCRuneaP+oLGnQ3LZHljgU=; b=YEPkCYZq31Up7koIQC+qwbubEd2KlrTvE8x8ow1BYsqgVnXM2SCxJ/1o7A5VFbBoFx GKUJGfh5ZnYSSpdW7rZEc6T87wDL5h6VQ77Alrr7yxFes7Qk01tQOmnrwufxoH5Ugzcy eu440yPJ58ZINEBDRNB1+g8QooqilJwLNXM6SB9YXdwgOZ1JXSFOjtZRZ+/yaEz9aYAa Kv1jyzLskLpSARJQsLGDqvEWRI6A1SZ0J0zmxPPfxSAH3Nbh6HaHBmFPo+ZVc+nZQJ38 Zp5e1mxEGF0rfZ0jyIKihj2NkcBk3AZfO9/oivuOQ9BKXWM0HAdGlRwGsVGFUtyvZMOS o3YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777076698; x=1777681498; 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=4wiJYfQEx2I1gNyVCcAbOWCRuneaP+oLGnQ3LZHljgU=; b=lfCFJ5++cVMJCcGekvWLIuhAdfuQvDI9GenV3gWA+tVI6gm8/OfCNbAZNibTlWJFkD 13KpKH4ndKBt4brC+nTXBpuammfMtS3wuwSELclvs3MWFnDVIX00wBS8UTFE0EsnR+gH 0kkLlMuzqs0RBui8mHKBRuIW9S9JCCyr2lypzK+x8l4ytoMZtxMZYuGaqLZoZ9yDrtBm V5L4YPI7mz3NAW1jEdRVzlGBDO//TRPt1cdQIM4MdFFaIWBj3lAbhsXsFHwciJFUiAvU fiSu+1grdaebC4CCGHqvR2iKefS5c1glLo34zJLrl2z5YNa+eTwjeb0NC64NsSjax6Op K+lA== X-Forwarded-Encrypted: i=1; AFNElJ8DWZSj/FcbaYvkaX6tKv08OCvD0VLIb0KSKFgcG7JiW6ctuu7IJNu0Y+KCUSaOQS6CoJeGNrFAMhjyw3Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yys4WebBjVyJD1j/NXBsHnhmnndyqv4y9FrHEACAnY0XE0MV+lq npq72ZeTPKP+6Zb+ksg6OLT1NAndxLSP+jKjR7lgPM7vkqC3T3M5FvWJZqX9oFlf1EKHv6J2TLc aYlvs5nPkJ/wM32H/M+oGdadFhA== X-Received: from plsa9.prod.google.com ([2002:a17:902:b589:b0:2b2:5616:36aa]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1aac:b0:2b2:4d36:7ba with SMTP id d9443c01a7336-2b5f9d69075mr306727115ad.0.1777076697866; Fri, 24 Apr 2026 17:24:57 -0700 (PDT) Date: Sat, 25 Apr 2026 00:24:48 +0000 In-Reply-To: <20260425002450.163421-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: <20260425002450.163421-1-hramamurthy@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260425002450.163421-3-hramamurthy@google.com> Subject: [PATCH net v2 2/4] gve: Fix backward stats when interface goes down or configuration is adjusted From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, willemb@google.com, maolson@google.com, nktgrg@google.com, jfraker@google.com, ziweixiao@google.com, jacob.e.keller@intel.com, pkaligineedi@google.com, shailend@google.com, jordanrhee@google.com, stable@vger.kernel.org, linux-kernel@vger.kernel.org, Debarghya Kundu , Pin-yen Lin Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Debarghya Kundu gve_get_base_stats() sets all the stats to 0, so the stats go backwards when interface goes down or configuration is adjusted. Fix this by persisting baseline stats across interface down. Cc: stable@vger.kernel.org Fixes: 2e5e0932dff5 ("gve: add support for basic queue stats") Signed-off-by: Debarghya Kundu Co-developed-by: Pin-yen Lin Signed-off-by: Pin-yen Lin Signed-off-by: Harshitha Ramamurthy --- Changes in v2: - Add a NULL pointer check in gve_get_ring_err_stats() (Sashiko) - Use local variable to prevent inflates from u64_stats_fetch_retry() (Sashiko) - Add u64_stats_fetch/begin to protect base stats (Sashiko) drivers/net/ethernet/google/gve/gve.h | 7 ++ drivers/net/ethernet/google/gve/gve_main.c | 88 ++++++++++++++++++++-- 2 files changed, 88 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 1d66d3834f7e..702b1641d984 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -794,6 +794,10 @@ struct gve_ptp { struct gve_priv *priv; }; =20 +struct gve_ring_err_stats { + u64 rx_alloc_fails; +}; + struct gve_priv { struct net_device *dev; struct gve_tx_ring *tx; /* array of tx_cfg.num_queues */ @@ -883,6 +887,9 @@ struct gve_priv { unsigned long service_task_flags; unsigned long state_flags; =20 + struct gve_ring_err_stats base_ring_err_stats; + struct rtnl_link_stats64 base_net_stats; + struct u64_stats_sync base_statss; /* sync stats for 32bit archs */ struct gve_stats_report *stats_report; u64 stats_report_len; dma_addr_t stats_report_bus; /* dma address for the stats report */ diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index ef00d9ca1643..1fec8e1e4821 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -106,9 +106,34 @@ static netdev_tx_t gve_start_xmit(struct sk_buff *skb,= struct net_device *dev) return gve_tx_dqo(skb, dev); } =20 -static void gve_get_stats(struct net_device *dev, struct rtnl_link_stats64= *s) +static void gve_add_base_stats(struct gve_priv *priv, + struct rtnl_link_stats64 *s) +{ + struct rtnl_link_stats64 *base_stats =3D &priv->base_net_stats; + unsigned int start; + u64 rx_packets, rx_bytes, rx_dropped, tx_packets, tx_bytes, tx_dropped; + + do { + start =3D u64_stats_fetch_begin(&priv->base_statss); + rx_packets =3D base_stats->rx_packets; + rx_bytes =3D base_stats->rx_bytes; + rx_dropped =3D base_stats->rx_dropped; + tx_packets =3D base_stats->tx_packets; + tx_bytes =3D base_stats->tx_bytes; + tx_dropped =3D base_stats->tx_dropped; + } while (u64_stats_fetch_retry(&priv->base_statss, start)); + + s->rx_packets +=3D rx_packets; + s->rx_bytes +=3D rx_bytes; + s->rx_dropped +=3D rx_dropped; + s->tx_packets +=3D tx_packets; + s->tx_bytes +=3D tx_bytes; + s->tx_dropped +=3D tx_dropped; +} + +static void gve_get_ring_stats(struct gve_priv *priv, + struct rtnl_link_stats64 *s) { - struct gve_priv *priv =3D netdev_priv(dev); unsigned int start; u64 packets, bytes; int num_tx_queues; @@ -143,6 +168,14 @@ static void gve_get_stats(struct net_device *dev, stru= ct rtnl_link_stats64 *s) } } =20 +static void gve_get_stats(struct net_device *dev, struct rtnl_link_stats64= *s) +{ + struct gve_priv *priv =3D netdev_priv(dev); + + gve_get_ring_stats(priv, s); + gve_add_base_stats(priv, s); +} + static int gve_alloc_flow_rule_caches(struct gve_priv *priv) { struct gve_flow_rules_cache *flow_rules_cache =3D &priv->flow_rules_cache; @@ -1533,6 +1566,29 @@ static int gve_queues_stop(struct gve_priv *priv) return gve_reset_recovery(priv, false); } =20 +static void gve_get_ring_err_stats(struct gve_priv *priv, + struct gve_ring_err_stats *err_stats) +{ + int ring; + + if (!priv->rx) + return; + + for (ring =3D 0; ring < priv->rx_cfg.num_queues; ring++) { + struct gve_rx_ring *rx =3D &priv->rx[ring]; + unsigned int start; + u64 rx_alloc_fails; + + do { + start =3D u64_stats_fetch_begin(&rx->statss); + rx_alloc_fails =3D rx->rx_skb_alloc_fail + + rx->rx_buf_alloc_fail; + } while (u64_stats_fetch_retry(&rx->statss, start)); + + err_stats->rx_alloc_fails +=3D rx_alloc_fails; + } +} + static int gve_close(struct net_device *dev) { struct gve_priv *priv =3D netdev_priv(dev); @@ -1542,6 +1598,12 @@ static int gve_close(struct net_device *dev) if (err) return err; =20 + /* Save ring queue and err stats before closing the interface */ + u64_stats_update_begin(&priv->base_statss); + gve_get_ring_stats(priv, &priv->base_net_stats); + gve_get_ring_err_stats(priv, &priv->base_ring_err_stats); + u64_stats_update_end(&priv->base_statss); + gve_queues_mem_remove(priv); return 0; } @@ -2784,12 +2846,24 @@ static void gve_get_base_stats(struct net_device *d= ev, struct netdev_queue_stats_rx *rx, struct netdev_queue_stats_tx *tx) { - rx->packets =3D 0; - rx->bytes =3D 0; - rx->alloc_fail =3D 0; + const struct gve_ring_err_stats *base_err_stats; + const struct rtnl_link_stats64 *base_stats; + struct gve_priv *priv; + unsigned int start; =20 - tx->packets =3D 0; - tx->bytes =3D 0; + priv =3D netdev_priv(dev); + base_stats =3D &priv->base_net_stats; + base_err_stats =3D &priv->base_ring_err_stats; + + do { + start =3D u64_stats_fetch_begin(&priv->base_statss); + rx->packets =3D base_stats->rx_packets; + rx->bytes =3D base_stats->rx_bytes; + rx->alloc_fail =3D base_err_stats->rx_alloc_fails; + + tx->packets =3D base_stats->tx_packets; + tx->bytes =3D base_stats->tx_bytes; + } while (u64_stats_fetch_retry(&priv->base_statss, start)); } =20 static const struct netdev_stat_ops gve_stat_ops =3D { --=20 2.54.0.545.g6539524ca2-goog From nobody Tue Jun 16 19:33:07 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA7BF1E32CF for ; Sat, 25 Apr 2026 00:25:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777076703; cv=none; b=RYftBNRZZcxQ6oPxL8i7KOZc2m1ImRf3QYp76i6RPSsEQ0VLNmJ53LuvWQN7kGR/6nZJS/WyYH8hOgjFUs/Xy5Cc4hJhPrMYjv7rGLE8GnROSwG3WrRQlYrxNdvXeY2U06N3HhRXoc+0vw2B3yNRG4DtCJ0Uk/61x6Q4SDzfXkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777076703; c=relaxed/simple; bh=LEicXDAPI28EFLbCEUUUbtCAmhQDAo7ran0ciTNYXjg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=kP5m9O293vxmf/cwAeQAshRTxkuzslrx+nJvzE55AslMRpd6FVyFsy3bjmYmZiho/eF31MFCMhkpO0B3DWwZDmL6NcNruFbPHz5JCiuVZfDsIXa82/cPOWBvdkZHW+8QutsoZRIc7dgqeIK7sQ8QCt4gU/VA0NUJUS2wpXZDtSk= 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=qoPBrxK+; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--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="qoPBrxK+" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-35fbb5779e8so9227417a91.3 for ; Fri, 24 Apr 2026 17:25:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777076700; x=1777681500; 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=ZylLCoEiHYdV/ejnG8Go+DBKtjN8GWujCPj9sYIWSRA=; b=qoPBrxK+27GIQ2x5vdGbcybG3Gwi/Z93eA5xe2e7aIvgX97pyZ8pVK0dMba70f/5LS jX3qkXZPqo1P76Ub8mxiKgxheLLhRt7e0DrjyhkdFKy8aCFNwqW/gKgryRXRhJ1FUIvB AwV4R/36JVxdOFc3ysHjZhS/ylm0OYL4VSKf86NiNtgmDm5G5lxrQ/KV9n+19ZchqNLe k/akoPy/qdXXvAUUyFdS8pLjPXJENjufbu0OYsE+JRCJZIgzGwSZEqgwShYAL+oxioTo OHfbGZ25dV3pTE/eSBwkC7iSXlZqbVFqY5uYF+/rxo4Qmr000JNqDlp9uxmqRTCS9ivc 5kqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777076700; x=1777681500; 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=ZylLCoEiHYdV/ejnG8Go+DBKtjN8GWujCPj9sYIWSRA=; b=IYO+9rUreCKX4+Bl4RnkbRol6/AI2X/TxGCY+jsqFIb47sILUMtMcgaMzoIBARAPSt OPd2SkQ2z3rHXxkP2itF9u3lGWfhydOjBtJGkk/2kskprp9hVwa2FfIWEq0jOQpYzXuP M+sMuots1oOAF2JpEHiqdcDXUd8KvsQYsbuOW2DOdokRIUBTnEh8kugvp6RfwcAim8Wx euUmJ6Yy4xA2FdbRuB3kEEFPHIOxC3b4kR3pEA3jY/eKTlibRxtKdamn/wXXOBngJYQQ PltkEUIOz69y1LRnjwAc4/K9nQ0yzGJVtzK549jVrQ2xiOdiFyYAnGROSyH+pSDFTcg6 aMgA== X-Forwarded-Encrypted: i=1; AFNElJ/u6HI1pcjn6JEW0jtb5QznctQjz4yQpnC4UPul+AamyRsOvZGUW198zHoTMCKAkrcVyvIRzTfThW4HVv0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3hcBctNOnT5QwUV2CnHfdABK+gIAxTSd66pRWDXRHjm6GZF9y 3m2sHQVZQFUNpwBa1tBSiPSzud5qgwziuODVu/syM1H/j2PXgSLRYvvjxP6E2Huu9TGNGgjWqx6 cdZQRcbnOHNWfLZ2y0734bh73EQ== X-Received: from pjbfr11.prod.google.com ([2002:a17:90a:e2cb:b0:35d:a03b:ab5e]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2e46:b0:359:8dfd:64c8 with SMTP id 98e67ed59e1d1-361404a81e0mr33622651a91.24.1777076700095; Fri, 24 Apr 2026 17:25:00 -0700 (PDT) Date: Sat, 25 Apr 2026 00:24:49 +0000 In-Reply-To: <20260425002450.163421-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: <20260425002450.163421-1-hramamurthy@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260425002450.163421-4-hramamurthy@google.com> Subject: [PATCH net v2 3/4] gve: Use default min ring size when device option values are 0 From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, willemb@google.com, maolson@google.com, nktgrg@google.com, jfraker@google.com, ziweixiao@google.com, jacob.e.keller@intel.com, pkaligineedi@google.com, shailend@google.com, jordanrhee@google.com, stable@vger.kernel.org, linux-kernel@vger.kernel.org, Pin-yen Lin Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Pin-yen Lin On gvnic devices that support reporting minimum ring sizes, the device option always includes the min_(rx|tx)_ring_size fields, and the values will be 0 if they are not configured to be exposed. This makes the driver allow unexpected small ring size configurations from the userspace. Use the default ring size in the driver if the min ring sizes from the device option are 0. This was discovered by drivers/net/ring_reconfig.py selftest. Cc: stable@vger.kernel.org Fixes: ed4fb326947d ("gve: add support to read ring size ranges from the de= vice") Reviewed-by: Joshua Washington Reviewed-by: Jordan Rhee Signed-off-by: Pin-yen Lin Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_adminq.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index 08587bf40ed4..2cd0dd6ced94 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -189,7 +189,9 @@ void gve_parse_device_option(struct gve_priv *priv, *dev_op_modify_ring =3D (void *)(option + 1); =20 /* device has not provided min ring size */ - if (option_length =3D=3D GVE_DEVICE_OPTION_NO_MIN_RING_SIZE) + if (option_length =3D=3D GVE_DEVICE_OPTION_NO_MIN_RING_SIZE || + be16_to_cpu((*dev_op_modify_ring)->min_rx_ring_size) =3D=3D 0 || + be16_to_cpu((*dev_op_modify_ring)->min_tx_ring_size) =3D=3D 0) priv->default_min_ring_size =3D true; break; case GVE_DEV_OPT_ID_FLOW_STEERING: --=20 2.54.0.545.g6539524ca2-goog From nobody Tue Jun 16 19:33:07 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D9B1197A7D for ; Sat, 25 Apr 2026 00:25:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777076703; cv=none; b=f5/sqSQ04+qQ2viwqX1pMwALHDD2Rhrp44VwrtTNluhBfQ5kyzsn0IHCGy4y26jgh1m2zf4WZdPpbzybjwsGl97KfefV/fMZ+FR5LYMLiT8zbM8RpOgPUqXFWX8Peu3iJI0HASRtcIUNoXSHr0FiPiOWCHCmbFr0vCsPEku9EN0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777076703; c=relaxed/simple; bh=QTNTbvBnSC5EltdyXHhC+I6ndxnglhMXh0Und1seaOc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Au5X4BH8B3+mL+smR8d/i+hZjKpcTD4Qn/YRjBrYp1UpaJxOoKowVWw5DjrXWUDjrkPRQBHlsEBz5s8cLqdadjRhn0c03oVvw3PSzvzVbbPFGvDyCOgufeNBMNdxE8Pxtku/xUcBArJlSoAYCGqqki0weSFFQ4iXQHYcJHq7sXc= 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=CBRPuchh; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--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="CBRPuchh" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-35fb969a4c0so9306102a91.3 for ; Fri, 24 Apr 2026 17:25:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1777076702; x=1777681502; 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=7Mr9oFSsC133Mf1hRrHkDLNxZVk8eA36xlUlRpvwFcQ=; b=CBRPuchhYdZYzIvpOG1tcmhpJr0LOe6LO4Y+nWc+j52ZEK2GCg5znzBGIxg6uoFcjW 41fl+o5gaExn0reO9/rOKOXIQIXqghV4NfwhqrBz9zEXNSxf2USNeiTXLaefw2OunKql sfmtWTBKsurLmMCS/y+8ey7ECBQQ9y24XvChp11EgUjen1CFFw4JIWFc+53OuspbrgRX VTKX/zF0aWqYFd1BKxH0yqAJ47eTyLtcvGdnsa4Z4/+SRl5FAwCtjLxiGQDwjGQA2nkB OxV3TDR7QWFGWIN+uwj8PhX8VyKEIexQuPm6/j7sVKtPlsIi7WdTKKALX359NHWbVgF4 vKZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777076702; x=1777681502; 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=7Mr9oFSsC133Mf1hRrHkDLNxZVk8eA36xlUlRpvwFcQ=; b=rRaR2yyx/MkgUMB3X3wHecze8Tl+oUgtH3po+set9fb8D6PUIDVcFzYSsjF5gzBM4d fkS+2u9ga/ZQVMSbkbQXiO0vwr6a6h95rKLK8vWfwDiw965f0793z7WI+/vFtJnKy1e+ QlSLLRpl5PLpR/9tvO8KaZ5GGxIJp1F2FByp1COQ3Nz/C2ONE1dvv8OSHyZAJ3quLgnu En2HfhTr/dvnTm/D0VcoNI81MEaCRxgntgPxMNgGEhmD+c6unAmDM4WauFq8zIgmyzQ0 dfIreo6Dmi4bZE4bqyxe/wKkW+Jcjzl6lQWoWs2qQEK9/6FbC8VmcY/xo+wvVrLzPyxT dVmA== X-Forwarded-Encrypted: i=1; AFNElJ+9XaJpk4aKhGFY/vXQfbFPjWhV9GJpOp8diu5Xgnln8KCJaBl5c+CIsGg6b6wKvijYl6Xn3XaWLIIPncc=@vger.kernel.org X-Gm-Message-State: AOJu0YxNCNWNRu8ukDd90a2pwGYxf36WR5rFlmcYnaQUBE5OCrEOqvMV cWbloPGw6HuHWB997mpiHSl12+jgJqU1QcDJnC8M6e81untuFRZSfPSLVF972gw/DuO7oopq6nN t7mGUcKpSi/Vum36aeOkDWh9eTw== X-Received: from pjh13.prod.google.com ([2002:a17:90b:3f8d:b0:35f:be31:1a85]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2892:b0:35d:a0b7:9608 with SMTP id 98e67ed59e1d1-361403e8a1bmr33217393a91.7.1777076701965; Fri, 24 Apr 2026 17:25:01 -0700 (PDT) Date: Sat, 25 Apr 2026 00:24:50 +0000 In-Reply-To: <20260425002450.163421-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: <20260425002450.163421-1-hramamurthy@google.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog Message-ID: <20260425002450.163421-5-hramamurthy@google.com> Subject: [PATCH net v2 4/4] gve: Make ethtool config changes synchronous From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, willemb@google.com, maolson@google.com, nktgrg@google.com, jfraker@google.com, ziweixiao@google.com, jacob.e.keller@intel.com, pkaligineedi@google.com, shailend@google.com, jordanrhee@google.com, stable@vger.kernel.org, linux-kernel@vger.kernel.org, Pin-yen Lin Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Pin-yen Lin When modifying device features via ethtool, the driver queues the carrier status update to its workqueue (gve_wq). This leads to a short link-down state after running the ethtool command. Use `gve_turnup_and_check_status()` instead of `gve_turnup()` in `gve_queues_start()` to update the carrier status before returning to the userspace. This was discovered by drivers/net/ping.py selftest. The test calls ping command right after an ethtool configuration, but the interface could be down without this fix. Cc: stable@vger.kernel.org Fixes: 5f08cd3d6423 ("gve: Alloc before freeing when adjusting queues") Signed-off-by: Pin-yen Lin Reviewed-by: Joshua Washington Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_main.c | 56 +++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 1fec8e1e4821..2c461be12a75 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -1424,6 +1424,33 @@ static void gve_queues_mem_remove(struct gve_priv *p= riv) priv->rx =3D NULL; } =20 +static void gve_handle_link_status(struct gve_priv *priv, bool link_status) +{ + if (!gve_get_napi_enabled(priv)) + return; + + if (link_status =3D=3D netif_carrier_ok(priv->dev)) + return; + + if (link_status) { + netdev_info(priv->dev, "Device link is up.\n"); + netif_carrier_on(priv->dev); + } else { + netdev_info(priv->dev, "Device link is down.\n"); + netif_carrier_off(priv->dev); + } +} + +static void gve_turnup_and_check_status(struct gve_priv *priv) +{ + u32 status; + + gve_turnup(priv); + status =3D ioread32be(&priv->reg_bar0->device_status); + gve_handle_link_status(priv, + GVE_DEVICE_STATUS_LINK_STATUS_MASK & status); +} + /* The passed-in queue memory is stored into priv and the queues are made = live. * No memory is allocated. Passed-in memory is freed on errors. */ @@ -1486,8 +1513,7 @@ static int gve_queues_start(struct gve_priv *priv, round_jiffies(jiffies + msecs_to_jiffies(priv->stats_report_timer_period))); =20 - gve_turnup(priv); - queue_work(priv->gve_wq, &priv->service_task); + gve_turnup_and_check_status(priv); priv->interface_up_cnt++; return 0; =20 @@ -1608,23 +1634,6 @@ static int gve_close(struct net_device *dev) return 0; } =20 -static void gve_handle_link_status(struct gve_priv *priv, bool link_status) -{ - if (!gve_get_napi_enabled(priv)) - return; - - if (link_status =3D=3D netif_carrier_ok(priv->dev)) - return; - - if (link_status) { - netdev_info(priv->dev, "Device link is up.\n"); - netif_carrier_on(priv->dev); - } else { - netdev_info(priv->dev, "Device link is down.\n"); - netif_carrier_off(priv->dev); - } -} - static int gve_configure_rings_xdp(struct gve_priv *priv, u16 num_xdp_rings) { @@ -2099,15 +2108,6 @@ static void gve_turnup(struct gve_priv *priv) gve_set_napi_enabled(priv); } =20 -static void gve_turnup_and_check_status(struct gve_priv *priv) -{ - u32 status; - - gve_turnup(priv); - status =3D ioread32be(&priv->reg_bar0->device_status); - gve_handle_link_status(priv, GVE_DEVICE_STATUS_LINK_STATUS_MASK & status); -} - static struct gve_notify_block *gve_get_tx_notify_block(struct gve_priv *p= riv, unsigned int txqueue) { --=20 2.54.0.545.g6539524ca2-goog