On Fri, Feb 13, 2026 at 10:26:29AM +0000, Anatoly Burakov wrote: > 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_ */ > --
While its primarily a matter of taste, do we really need to create a new header for this? For a single function prototype can it not just go in iavf.h directly itself? Either way: Acked-by: Bruce Richardson <[email protected]>

