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 <[email protected]>
Reviewed-by: Joshua Washington <[email protected]>
---
 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

Reply via email to