> -----Original Message----- > From: dev <dev-boun...@dpdk.org> On Behalf Of Junyu Jiang > Sent: Wednesday, March 25, 2020 2:33 PM > To: dev@dpdk.org > Cc: Yang, Qiming <qiming.y...@intel.com>; Yigit, Ferruh > <ferruh.yi...@intel.com>; Jiang, > JunyuX <junyux.ji...@intel.com>; sta...@dpdk.org > Subject: [dpdk-dev] [PATCH v2 2/2] examples/vmdq: fix RSS configuration > > In order that all queues of pools can receive packets, > add enable-rss argument to change rss configuration. > > Fixes: 6bb97df521aa ("examples/vmdq: new app") > Cc: sta...@dpdk.org > > Signed-off-by: Junyu Jiang <junyux.ji...@intel.com> > Acked-by: Xiaoyun Li <xiaoyun...@intel.com> > --- > doc/guides/sample_app_ug/vmdq_forwarding.rst | 6 +-- > examples/vmdq/main.c | 39 +++++++++++++++++--- > 2 files changed, 37 insertions(+), 8 deletions(-) > > diff --git a/doc/guides/sample_app_ug/vmdq_forwarding.rst > b/doc/guides/sample_app_ug/vmdq_forwarding.rst > index df23043d6..658d6742d 100644 > --- a/doc/guides/sample_app_ug/vmdq_forwarding.rst > +++ b/doc/guides/sample_app_ug/vmdq_forwarding.rst > @@ -26,13 +26,13 @@ The IntelĀ® 82599 10 Gigabit Ethernet Controller NIC also > supports > the splitting > While the IntelĀ® X710 or XL710 Ethernet Controller NICs support many > configurations of > VMDQ pools of 4 or 8 queues each. > And queues numbers for each VMDQ pool can be changed by setting > CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM > in config/common_* file. > -The nb-pools parameter can be passed on the command line, after the EAL > parameters: > +The nb-pools and enable-rss parameters can be passed on the command line, > after the > EAL parameters: > > .. code-block:: console > > - ./build/vmdq_app [EAL options] -- -p PORTMASK --nb-pools NP > + ./build/vmdq_app [EAL options] -- -p PORTMASK --nb-pools NP --enable-rss > > -where, NP can be 8, 16 or 32. > +where, NP can be 8, 16 or 32, rss is disabled by default. > > In Linux* user space, the application can display statistics with the number > of packets > received on each queue. > To have the application display the statistics, send a SIGHUP signal to the > running > application process. > diff --git a/examples/vmdq/main.c b/examples/vmdq/main.c > index 011110920..98032e6a3 100644 > --- a/examples/vmdq/main.c > +++ b/examples/vmdq/main.c > @@ -59,6 +59,7 @@ static uint32_t enabled_port_mask; > /* number of pools (if user does not specify any, 8 by default */ > static uint32_t num_queues = 8; > static uint32_t num_pools = 8; > +static uint8_t rss_enable; > > /* empty vmdq configuration structure. Filled in programatically */ > static const struct rte_eth_conf vmdq_conf_default = { > @@ -143,6 +144,13 @@ get_eth_conf(struct rte_eth_conf *eth_conf, uint32_t > num_pools) > (void)(rte_memcpy(eth_conf, &vmdq_conf_default, sizeof(*eth_conf))); > (void)(rte_memcpy(ð_conf->rx_adv_conf.vmdq_rx_conf, &conf, > sizeof(eth_conf->rx_adv_conf.vmdq_rx_conf))); > + if (rss_enable) { > + eth_conf->rxmode.mq_mode = ETH_MQ_RX_VMDQ_RSS; > + eth_conf->rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP | > + ETH_RSS_UDP | > + ETH_RSS_TCP | > + ETH_RSS_SCTP; > + } > return 0; > } > > @@ -164,6 +172,7 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool) > uint16_t q; > uint16_t queues_per_pool; > uint32_t max_nb_pools; > + uint64_t rss_hf_tmp; > > /* > * The max pool number from dev_info will be used to validate the pool > @@ -209,6 +218,17 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool) > if (!rte_eth_dev_is_valid_port(port)) > return -1; > > + rss_hf_tmp = port_conf.rx_adv_conf.rss_conf.rss_hf; > + port_conf.rx_adv_conf.rss_conf.rss_hf &= > + dev_info.flow_type_rss_offloads; > + if (port_conf.rx_adv_conf.rss_conf.rss_hf != rss_hf_tmp) { > + printf("Port %u modified RSS hash function based on hardware > support,"
This is RSS offload type but not hash function.