The GQ QPL queue format has a maximum supported ring size of 2k.
However, it is possible in some cases for the device to pass a larger
ring size as the max ring size. Restrict the ring size in the driver to
ensure that rings with invalid queue depths are not created.
Fixes: cde01d164f8f ("net/gve: support modifying ring size in GQ format")
Cc: [email protected]
Signed-off-by: Joshua Washington <[email protected]>
Reviewed-by: Jasper Tran O'Leary <[email protected]>
---
drivers/net/gve/base/gve_adminq.c | 12 +++++++++---
drivers/net/gve/gve_ethdev.h | 1 +
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/net/gve/base/gve_adminq.c
b/drivers/net/gve/base/gve_adminq.c
index 2b25c7f390..315e2456fd 100644
--- a/drivers/net/gve/base/gve_adminq.c
+++ b/drivers/net/gve/base/gve_adminq.c
@@ -6,6 +6,7 @@
#include "../gve_ethdev.h"
#include "gve_adminq.h"
#include "gve_register.h"
+#include "rte_common.h"
#define GVE_MAX_ADMINQ_RELEASE_CHECK 500
#define GVE_ADMINQ_SLEEP_LEN 20
@@ -946,15 +947,20 @@ static void
gve_set_max_desc_cnt(struct gve_priv *priv,
const struct gve_device_option_modify_ring *modify_ring)
{
+ priv->max_rx_desc_cnt = be16_to_cpu(modify_ring->max_ring_size.rx);
+ priv->max_tx_desc_cnt = be16_to_cpu(modify_ring->max_ring_size.tx);
+
if (priv->queue_format == GVE_DQO_RDA_FORMAT) {
PMD_DRV_LOG(DEBUG, "Overriding max ring size from device for DQ
"
"queue format to 4096.");
priv->max_rx_desc_cnt = GVE_MAX_QUEUE_SIZE_DQO;
priv->max_tx_desc_cnt = GVE_MAX_QUEUE_SIZE_DQO;
- return;
+ } else if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
+ priv->max_rx_desc_cnt = RTE_MIN(priv->max_rx_desc_cnt,
+ GVE_MAX_RING_SIZE_GQ_QPL);
+ priv->max_tx_desc_cnt = RTE_MIN(priv->max_tx_desc_cnt,
+ GVE_MAX_RING_SIZE_GQ_QPL);
}
- priv->max_rx_desc_cnt = be16_to_cpu(modify_ring->max_ring_size.rx);
- priv->max_tx_desc_cnt = be16_to_cpu(modify_ring->max_ring_size.tx);
}
static void gve_enable_supported_features(struct gve_priv *priv,
diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h
index 4a7e5ecdf3..c9a176ff17 100644
--- a/drivers/net/gve/gve_ethdev.h
+++ b/drivers/net/gve/gve_ethdev.h
@@ -21,6 +21,7 @@
#define DQO_TX_MULTIPLIER 4
#define GVE_DEFAULT_MAX_RING_SIZE 1024
+#define GVE_MAX_RING_SIZE_GQ_QPL 2048
#define GVE_DEFAULT_MIN_RX_RING_SIZE 512
#define GVE_DEFAULT_MIN_TX_RING_SIZE 256
--
2.55.0.rc0.799.gd6f94ed593-goog