Currently, parser deinitialization will trigger removal of current RSS configuration. This should not be done as part of parser deinitialization, but should rather be a separate step in dev close flow.
Signed-off-by: Anatoly Burakov <[email protected]> --- drivers/net/intel/iavf/iavf_ethdev.c | 4 ++++ drivers/net/intel/iavf/iavf_hash.c | 13 +++++++++---- drivers/net/intel/iavf/iavf_hash.h | 13 +++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 drivers/net/intel/iavf/iavf_hash.h diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c index 802e095174..70eb7e7ec5 100644 --- a/drivers/net/intel/iavf/iavf_ethdev.c +++ b/drivers/net/intel/iavf/iavf_ethdev.c @@ -35,6 +35,7 @@ #include "iavf_generic_flow.h" #include "rte_pmd_iavf.h" #include "iavf_ipsec_crypto.h" +#include "iavf_hash.h" /* devargs */ #define IAVF_PROTO_XTR_ARG "proto_xtr" @@ -2972,6 +2973,9 @@ iavf_dev_close(struct rte_eth_dev *dev) /* free iAVF security device context all related resources */ iavf_security_ctx_destroy(adapter); + /* remove RSS configuration */ + iavf_hash_uninit(adapter); + iavf_flow_flush(dev, NULL); iavf_flow_uninit(adapter); diff --git a/drivers/net/intel/iavf/iavf_hash.c b/drivers/net/intel/iavf/iavf_hash.c index a40fed7542..d864998402 100644 --- a/drivers/net/intel/iavf/iavf_hash.c +++ b/drivers/net/intel/iavf/iavf_hash.c @@ -22,6 +22,7 @@ #include "iavf_log.h" #include "iavf.h" #include "iavf_generic_flow.h" +#include "iavf_hash.h" #define IAVF_PHINT_NONE 0 #define IAVF_PHINT_GTPU BIT_ULL(0) @@ -77,7 +78,7 @@ static int iavf_hash_destroy(struct iavf_adapter *ad, struct rte_flow *flow, struct rte_flow_error *error); static void -iavf_hash_uninit(struct iavf_adapter *ad); +iavf_hash_uninit_parser(struct iavf_adapter *ad); static void iavf_hash_free(struct rte_flow *flow); static int @@ -680,7 +681,7 @@ static struct iavf_flow_engine iavf_hash_engine = { .init = iavf_hash_init, .create = iavf_hash_create, .destroy = iavf_hash_destroy, - .uninit = iavf_hash_uninit, + .uninit = iavf_hash_uninit_parser, .free = iavf_hash_free, .type = IAVF_FLOW_ENGINE_HASH, }; @@ -1641,6 +1642,12 @@ iavf_hash_destroy(__rte_unused struct iavf_adapter *ad, } static void +iavf_hash_uninit_parser(struct iavf_adapter *ad) +{ + iavf_unregister_parser(&iavf_hash_parser, ad); +} + +void iavf_hash_uninit(struct iavf_adapter *ad) { struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(ad); @@ -1658,8 +1665,6 @@ iavf_hash_uninit(struct iavf_adapter *ad) rss_conf = &ad->dev_data->dev_conf.rx_adv_conf.rss_conf; if (iavf_rss_hash_set(ad, rss_conf->rss_hf, false)) PMD_DRV_LOG(ERR, "fail to delete default RSS"); - - iavf_unregister_parser(&iavf_hash_parser, ad); } static void diff --git a/drivers/net/intel/iavf/iavf_hash.h b/drivers/net/intel/iavf/iavf_hash.h new file mode 100644 index 0000000000..2348f32673 --- /dev/null +++ b/drivers/net/intel/iavf/iavf_hash.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2025 Intel Corporation + */ + +#ifndef _IAVF_HASH_H_ +#define _IAVF_HASH_H_ + +#include "iavf.h" + +void +iavf_hash_uninit(struct iavf_adapter *ad); + +#endif /* _IAVF_HASH_H_ */ -- 2.47.3

