[PATCH 6/9] net/gve: add check for device reset to AQ ctrl ops

Jasper Tran O'Leary jtranoleary at google.com
Tue Oct 27 19:54:15 CET 2026


Refactor the check for the device needing a reset into a control plane
operation. This will make it easier to add a corresponding Mailbox
operation in subsequent patches.

Signed-off-by: Jasper Tran O'Leary <jtranoleary at google.com>
Reviewed-by: Joshua Washington <joshwash at google.com>
---
 drivers/net/gve/gve_ethdev.c | 14 +++++++++++---
 drivers/net/gve/gve_ethdev.h |  1 +
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c
index 391e7923f..cfd043dbf 100644
--- a/drivers/net/gve/gve_ethdev.c
+++ b/drivers/net/gve/gve_ethdev.c
@@ -1711,14 +1711,14 @@ gve_set_default_ring_size_bounds(struct gve_priv *priv)
 static void
 gve_check_device_status(void *arg)
 {
+	struct gve_process_private *process_priv;
 	struct rte_eth_dev *dev = arg;
 	struct gve_priv *priv = dev->data->dev_private;
-	uint32_t dev_status;
 	int ret;
 
-	dev_status = ioread32be(&priv->reg_bar0->device_status);
+	process_priv = rte_eth_devices[priv->port_id].process_private;
 
-	if (dev_status & GVE_DEVICE_STATUS_RESET_MASK) {
+	if (process_priv->ctrl_ops->check_device_needs_reset(priv)) {
 		PMD_DRV_LOG(INFO,
 			"Device on port %u requests a reset. Stopping device status polling.",
 			dev->data->port_id);
@@ -1783,9 +1783,17 @@ gve_adminq_get_device_properties(struct gve_priv *priv)
 	return gve_adminq_describe_device(priv);
 }
 
+static bool
+gve_adminq_check_device_needs_reset(struct gve_priv *priv)
+{
+	uint32_t dev_status = ioread32be(&priv->reg_bar0->device_status);
+	return (dev_status & GVE_DEVICE_STATUS_RESET_MASK) != 0;
+}
+
 static const struct gve_ctrl_ops gve_adminq_ops = {
 	.init_ctrl_plane = gve_adminq_alloc,
 	.free_ctrl_plane = gve_adminq_free,
+	.check_device_needs_reset = gve_adminq_check_device_needs_reset,
 	.get_device_properties = gve_adminq_get_device_properties,
 	.get_ptype_map = gve_adminq_get_ptype_map_dqo,
 	.get_interrupt_dbs = gve_adminq_configure_device_resources,
diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h
index d16db54a8..495b60c11 100644
--- a/drivers/net/gve/gve_ethdev.h
+++ b/drivers/net/gve/gve_ethdev.h
@@ -307,6 +307,7 @@ struct gve_txq_config {
 struct gve_ctrl_ops {
 	int (*init_ctrl_plane)(struct gve_priv *priv);
 	void (*free_ctrl_plane)(struct gve_priv *priv);
+	bool (*check_device_needs_reset)(struct gve_priv *priv);
 	int (*get_device_properties)(struct gve_priv *priv);
 	int (*get_ptype_map)(struct gve_priv *priv);
 	int (*get_interrupt_dbs)(struct gve_priv *priv);
-- 
2.56.0.307.g5fe7bd680c-goog



More information about the dev mailing list