Derive queue type flags from scratch on every queue setup
so that flags left over from a previous configuration do
not persist when an offload is disabled.

Fixes: b8cf5ba549f2 ("net/sfc: support initialising different Rx queue types")
Cc: [email protected]

Signed-off-by: Ivan Malov <[email protected]>
Reviewed-by: Andy Moreton <[email protected]>
---
 drivers/net/sfc/sfc_rx.c | 8 ++++----
 drivers/net/sfc/sfc_rx.h | 1 +
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c
index d8b961ff7e..1d4101b9e9 100644
--- a/drivers/net/sfc/sfc_rx.c
+++ b/drivers/net/sfc/sfc_rx.c
@@ -1183,9 +1183,9 @@ sfc_rx_qinit(struct sfc_adapter *sa, sfc_sw_index_t 
sw_index,
        else
                rxq_info->type = EFX_RXQ_TYPE_DEFAULT;
 
-       rxq_info->type_flags |=
-               (offloads & RTE_ETH_RX_OFFLOAD_SCATTER) ?
-               EFX_RXQ_FLAG_SCATTER : EFX_RXQ_FLAG_NONE;
+       rxq_info->type_flags = rxq_info->extra_type_flags |
+               ((offloads & RTE_ETH_RX_OFFLOAD_SCATTER) ?
+               EFX_RXQ_FLAG_SCATTER : EFX_RXQ_FLAG_NONE);
 
        if ((encp->enc_tunnel_encapsulations_supported != 0) &&
            (sfc_dp_rx_offload_capa(sa->priv.dp_rx) &
@@ -1660,7 +1660,7 @@ sfc_rx_qinit_info(struct sfc_adapter *sa, sfc_sw_index_t 
sw_index,
        SFC_ASSERT(rte_is_power_of_2(max_entries));
 
        rxq_info->max_entries = max_entries;
-       rxq_info->type_flags = extra_efx_type_flags;
+       rxq_info->extra_type_flags = extra_efx_type_flags;
 
        return 0;
 }
diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h
index 4ab513915e..bd189e6a56 100644
--- a/drivers/net/sfc/sfc_rx.h
+++ b/drivers/net/sfc/sfc_rx.h
@@ -110,6 +110,7 @@ struct sfc_rxq_info {
        unsigned int            entries;
        efx_rxq_type_t          type;
        unsigned int            type_flags;
+       unsigned int            extra_type_flags;
        struct sfc_dp_rxq       *dp;
        boolean_t               deferred_start;
        boolean_t               deferred_started;
-- 
2.47.3

Reply via email to