[SRU][R:linux-gcp][PATCH 1/2] gve: Enable reading max ring size from the device in DQO-QPL mode
Rickey Castillo
rickey.castillo.valenzuela at canonical.com
Fri Sep 11 00:17:36 UTC 2026
From: Matt Olson <maolson at google.com>
BugLink: https://bugs.launchpad.net/bugs/2153950
The gVNIC device indicates a device option (MODIFY_RING) to the driver,
which presents a range of ring sizes from which the user is allowed to
select. But in DQO-QPL queue format, the driver ignores the "max" of
this range and instead allows the user to configure the ring size in the
range [min, default]. This was done because increasing the ring size
could result in the number of registered pages being higher than the max
allowed by the device.
In order to support large ring sizes, stop ignoring the "max" of the
range presented in the MODIFY_RING option.
Signed-off-by: Matt Olson <maolson at google.com>
Signed-off-by: Max Yuan <maxyuan at google.com>
Reviewed-by: Jordan Rhee <jordanrhee at google.com>
Reviewed-by: Harshitha Ramamurthy <hramamurthy at google.com>
Reviewed-by: Praveen Kaligineedi <pkaligineedi at google.com>
Signed-off-by: Joshua Washington <joshwash at google.com>
Link: https://patch.msgid.link/20260225182342.1049816-3-joshwash@google.com
Signed-off-by: Jakub Kicinski <kuba at kernel.org>
(cherry picked from commit a2f19184014f309165d2d4cfb41088b75c1121a4)
Signed-off-by: Rickey Castillo <rickey.castillo.valenzuela at canonical.com>
---
drivers/net/ethernet/google/gve/gve_adminq.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/ethernet/google/gve/gve_adminq.c
index b72cc0fa2ba2..99c241e1a238 100644
--- a/drivers/net/ethernet/google/gve/gve_adminq.c
+++ b/drivers/net/ethernet/google/gve/gve_adminq.c
@@ -997,12 +997,10 @@ static void gve_enable_supported_features(struct gve_priv *priv,
if (dev_op_modify_ring &&
(supported_features_mask & GVE_SUP_MODIFY_RING_MASK)) {
priv->modify_ring_size_enabled = true;
-
- /* max ring size for DQO QPL should not be overwritten because of device limit */
- if (priv->queue_format != GVE_DQO_QPL_FORMAT) {
- priv->max_rx_desc_cnt = be16_to_cpu(dev_op_modify_ring->max_rx_ring_size);
- priv->max_tx_desc_cnt = be16_to_cpu(dev_op_modify_ring->max_tx_ring_size);
- }
+ priv->max_rx_desc_cnt =
+ be16_to_cpu(dev_op_modify_ring->max_rx_ring_size);
+ priv->max_tx_desc_cnt =
+ be16_to_cpu(dev_op_modify_ring->max_tx_ring_size);
if (priv->default_min_ring_size) {
/* If device hasn't provided minimums, use default minimums */
priv->min_tx_desc_cnt = GVE_DEFAULT_MIN_TX_RING_SIZE;
--
2.53.0
More information about the kernel-team
mailing list