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

