From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 44C8D5F16; Fri, 14 Sep 2018 08:49:36 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Sep 2018 23:49:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,372,1531810800"; d="scan'208";a="70770675" Received: from kmsmsx155.gar.corp.intel.com ([172.21.73.106]) by fmsmga008.fm.intel.com with ESMTP; 13 Sep 2018 23:49:34 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.49]) by KMSMSX155.gar.corp.intel.com ([169.254.15.90]) with mapi id 14.03.0319.002; Fri, 14 Sep 2018 14:49:33 +0800 From: "Zhao1, Wei" To: "Xing, Beilei" , "Lu, Wenzhuo" CC: "dev@dpdk.org" , "stable@dpdk.org" Thread-Topic: [PATCH] net/e1000: correct queue number in RSS configuration Thread-Index: AQHUSzCBdlHguP6NV0iCU6F1Z4nKEaTvVv/w Date: Fri, 14 Sep 2018 06:49:32 +0000 Message-ID: References: <1536822383-52153-1-git-send-email-beilei.xing@intel.com> In-Reply-To: <1536822383-52153-1-git-send-email-beilei.xing@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [172.30.20.205] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-stable] [PATCH] net/e1000: correct queue number in RSS configuration X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Sep 2018 06:49:37 -0000 Acked-by: Wei Zhao > -----Original Message----- > From: Xing, Beilei > Sent: Thursday, September 13, 2018 3:06 PM > To: Zhao1, Wei ; Lu, Wenzhuo > > Cc: dev@dpdk.org; stable@dpdk.org > Subject: [PATCH] net/e1000: correct queue number in RSS configuration >=20 > RSS configuration works for all e1000 NICs except 82576. > This patch fixes this issue by correcting queue number in RSS configurati= on. >=20 > Fixes: 424ae915baf0 ("net/e1000: move RSS to flow API") > Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow API") > Cc: stable@dpdk.org >=20 > Signed-off-by: Beilei Xing > --- > drivers/net/e1000/e1000_ethdev.h | 6 ++++-- > drivers/net/e1000/igb_flow.c | 10 +++++++--- > drivers/net/e1000/igb_rxtx.c | 12 +++++++++--- > 3 files changed, 20 insertions(+), 8 deletions(-) >=20 > diff --git a/drivers/net/e1000/e1000_ethdev.h > b/drivers/net/e1000/e1000_ethdev.h > index 902001f..94edff0 100644 > --- a/drivers/net/e1000/e1000_ethdev.h > +++ b/drivers/net/e1000/e1000_ethdev.h > @@ -236,7 +236,8 @@ struct igb_ethertype_filter { struct > igb_rte_flow_rss_conf { > struct rte_flow_action_rss conf; /**< RSS parameters. */ > uint8_t key[IGB_HKEY_MAX_INDEX * sizeof(uint32_t)]; /* Hash key. > */ > - uint16_t queue[IGB_MAX_RX_QUEUE_NUM]; /**< Queues indices > to use. */ > + /* Queues indices to use. */ > + uint16_t queue[IGB_MAX_RX_QUEUE_NUM_82576]; > }; >=20 > /* > @@ -506,7 +507,8 @@ int eth_igb_syn_filter_set(struct rte_eth_dev *dev, > int eth_igb_add_del_flex_filter(struct rte_eth_dev *dev, > struct rte_eth_flex_filter *filter, > bool add); > -int igb_rss_conf_init(struct igb_rte_flow_rss_conf *out, > +int igb_rss_conf_init(struct rte_eth_dev *dev, > + struct igb_rte_flow_rss_conf *out, > const struct rte_flow_action_rss *in); int > igb_action_rss_same(const struct rte_flow_action_rss *comp, > const struct rte_flow_action_rss *with); diff --git > a/drivers/net/e1000/igb_flow.c b/drivers/net/e1000/igb_flow.c index > 0738529..3368349 100644 > --- a/drivers/net/e1000/igb_flow.c > +++ b/drivers/net/e1000/igb_flow.c > @@ -1307,6 +1307,7 @@ igb_parse_rss_filter(struct rte_eth_dev *dev, > struct igb_rte_flow_rss_conf *rss_conf, > struct rte_flow_error *error) > { > + struct e1000_hw *hw =3D E1000_DEV_PRIVATE_TO_HW(dev->data- > >dev_private); > const struct rte_flow_action *act; > const struct rte_flow_action_rss *rss; > uint16_t n, index; > @@ -1357,11 +1358,14 @@ igb_parse_rss_filter(struct rte_eth_dev *dev, > return rte_flow_error_set > (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, > act, > "RSS hash key must be exactly 40 bytes"); > - if (rss->queue_num > RTE_DIM(rss_conf->queue)) > + if (((hw->mac.type =3D=3D e1000_82576) && > + (rss->queue_num > IGB_MAX_RX_QUEUE_NUM_82576)) || > + ((hw->mac.type !=3D e1000_82576) && > + (rss->queue_num > IGB_MAX_RX_QUEUE_NUM))) > return rte_flow_error_set > (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, > act, > "too many queues for RSS context"); > - if (igb_rss_conf_init(rss_conf, rss)) > + if (igb_rss_conf_init(dev, rss_conf, rss)) > return rte_flow_error_set > (error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, > act, > "RSS context initialization failure"); @@ -1574,7 > +1578,7 @@ igb_flow_create(struct rte_eth_dev *dev, > PMD_DRV_LOG(ERR, "failed to allocate > memory"); > goto out; > } > - igb_rss_conf_init(&rss_filter_ptr->filter_info, > + igb_rss_conf_init(dev, &rss_filter_ptr->filter_info, > &rss_conf.conf); > TAILQ_INSERT_TAIL(&igb_filter_rss_list, > rss_filter_ptr, entries); > diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c > index b955068..dce42e6 100644 > --- a/drivers/net/e1000/igb_rxtx.c > +++ b/drivers/net/e1000/igb_rxtx.c > @@ -2852,11 +2852,17 @@ igb_txq_info_get(struct rte_eth_dev *dev, > uint16_t queue_id, } >=20 > int > -igb_rss_conf_init(struct igb_rte_flow_rss_conf *out, > +igb_rss_conf_init(struct rte_eth_dev *dev, > + struct igb_rte_flow_rss_conf *out, > const struct rte_flow_action_rss *in) { > + struct e1000_hw *hw =3D E1000_DEV_PRIVATE_TO_HW(dev->data- > >dev_private); > + > if (in->key_len > RTE_DIM(out->key) || > - in->queue_num > RTE_DIM(out->queue)) > + ((hw->mac.type =3D=3D e1000_82576) && > + (in->queue_num > IGB_MAX_RX_QUEUE_NUM_82576)) || > + ((hw->mac.type !=3D e1000_82576) && > + (in->queue_num > IGB_MAX_RX_QUEUE_NUM))) > return -EINVAL; > out->conf =3D (struct rte_flow_action_rss){ > .func =3D in->func, > @@ -2945,7 +2951,7 @@ igb_config_rss_filter(struct rte_eth_dev *dev, > rss_conf.rss_key =3D rss_intel_key; /* Default hash key */ > igb_hw_rss_hash_set(hw, &rss_conf); >=20 > - if (igb_rss_conf_init(&filter_info->rss_info, &conf->conf)) > + if (igb_rss_conf_init(dev, &filter_info->rss_info, &conf->conf)) > return -EINVAL; >=20 > return 0; > -- > 2.5.5