[dpdk-dev,1/3] fm10k: add multi-queue checking

Message ID 1443598134-11510-2-git-send-email-shaopeng.he@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

He, Shaopeng Sept. 30, 2015, 7:28 a.m. UTC
  Add multi-queue checking in device configure process.
Currently, VMDQ and RSS are supported.

Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
---
 drivers/net/fm10k/fm10k_ethdev.c | 44 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
  

Comments

Michael Qiu Oct. 15, 2015, 6:27 a.m. UTC | #1
On 2015/9/30 15:29, Shaopeng He wrote:
> Add multi-queue checking in device configure process.
> Currently, VMDQ and RSS are supported.
>
> Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
> ---
>  drivers/net/fm10k/fm10k_ethdev.c | 44 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
>
> diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
> index a69c990..082937d 100644
> --- a/drivers/net/fm10k/fm10k_ethdev.c
> +++ b/drivers/net/fm10k/fm10k_ethdev.c
> @@ -283,12 +283,56 @@ tx_queue_disable(struct fm10k_hw *hw, uint16_t qnum)
>  }
>  
>  static int
> +fm10k_check_mq_mode(struct rte_eth_dev *dev)
> +{
> +	enum rte_eth_rx_mq_mode rx_mq_mode = dev->data->dev_conf.rxmode.mq_mode;
> +	struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);
> +	struct rte_eth_vmdq_rx_conf *vmdq_conf;
> +	uint16_t nb_rx_q = dev->data->nb_rx_queues;
> +
> +	vmdq_conf = &dev->data->dev_conf.rx_adv_conf.vmdq_rx_conf;
> +
> +	if (rx_mq_mode & ETH_MQ_RX_DCB_FLAG) {
> +		PMD_INIT_LOG(ERR, "DCB mode is not supported.");
> +		return -EINVAL;
> +	}
> +
> +	if (!(rx_mq_mode & ETH_MQ_RX_VMDQ_FLAG))
> +		return 0;
> +
> +	if (hw->mac.type == fm10k_mac_vf) {
> +		PMD_INIT_LOG(ERR, "VMDQ mode is not supported in VF.");
> +		return -EINVAL;
> +	}

I think vf check should be the first one, then we do not need check dcb
and VMDq flag.

Thanks,
Michael
> +
> +	/* Check VMDQ queue pool number */
> +	if (vmdq_conf->nb_queue_pools >
> +			sizeof(vmdq_conf->pool_map[0].pools) * CHAR_BIT ||
> +			vmdq_conf->nb_queue_pools > nb_rx_q) {
> +		PMD_INIT_LOG(ERR, "Too many of queue pools: %d",
> +			vmdq_conf->nb_queue_pools);
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
> +static int
>  fm10k_dev_configure(struct rte_eth_dev *dev)
>  {
> +	int ret;
> +
>  	PMD_INIT_FUNC_TRACE();
>  
>  	if (dev->data->dev_conf.rxmode.hw_strip_crc == 0)
>  		PMD_INIT_LOG(WARNING, "fm10k always strip CRC");
> +	/* multipe queue mode checking */
> +	ret  = fm10k_check_mq_mode(dev);
> +	if (ret != 0) {
> +		PMD_DRV_LOG(ERR, "fm10k_check_mq_mode fails with %d.",
> +			    ret);
> +		return ret;
> +	}
>  
>  	return 0;
>  }
  
He, Shaopeng Oct. 15, 2015, 11:07 a.m. UTC | #2
Hi, Michael

> -----Original Message-----
> From: Qiu, Michael
> Sent: Thursday, October 15, 2015 2:28 PM
> To: He, Shaopeng; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH 1/3] fm10k: add multi-queue checking
> 
> On 2015/9/30 15:29, Shaopeng He wrote:
> > Add multi-queue checking in device configure process.
> > Currently, VMDQ and RSS are supported.
> >
> > Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
> > ---
> >  drivers/net/fm10k/fm10k_ethdev.c | 44
> > ++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 44 insertions(+)
> >
> > diff --git a/drivers/net/fm10k/fm10k_ethdev.c
> > b/drivers/net/fm10k/fm10k_ethdev.c
> > index a69c990..082937d 100644
> > --- a/drivers/net/fm10k/fm10k_ethdev.c
> > +++ b/drivers/net/fm10k/fm10k_ethdev.c
> > @@ -283,12 +283,56 @@ tx_queue_disable(struct fm10k_hw *hw,
> uint16_t
> > qnum)  }
> >
> >  static int
> > +fm10k_check_mq_mode(struct rte_eth_dev *dev) {
> > +	enum rte_eth_rx_mq_mode rx_mq_mode = dev->data-
> >dev_conf.rxmode.mq_mode;
> > +	struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> > +	struct rte_eth_vmdq_rx_conf *vmdq_conf;
> > +	uint16_t nb_rx_q = dev->data->nb_rx_queues;
> > +
> > +	vmdq_conf = &dev->data->dev_conf.rx_adv_conf.vmdq_rx_conf;
> > +
> > +	if (rx_mq_mode & ETH_MQ_RX_DCB_FLAG) {
> > +		PMD_INIT_LOG(ERR, "DCB mode is not supported.");
> > +		return -EINVAL;
> > +	}
> > +
> > +	if (!(rx_mq_mode & ETH_MQ_RX_VMDQ_FLAG))
> > +		return 0;
> > +
> > +	if (hw->mac.type == fm10k_mac_vf) {
> > +		PMD_INIT_LOG(ERR, "VMDQ mode is not supported in VF.");
> > +		return -EINVAL;
> > +	}
> 
> I think vf check should be the first one, then we do not need check dcb and
> VMDq flag.
> 
> Thanks,
> Michael

Thanks for the comments. There is a case of RSS support on VF, if vf check be 
the first one, it will return fail, which is not correct.

Thanks,
--Shaopeng
> > +
> > +	/* Check VMDQ queue pool number */
> > +	if (vmdq_conf->nb_queue_pools >
> > +			sizeof(vmdq_conf->pool_map[0].pools) * CHAR_BIT
> ||
> > +			vmdq_conf->nb_queue_pools > nb_rx_q) {
> > +		PMD_INIT_LOG(ERR, "Too many of queue pools: %d",
> > +			vmdq_conf->nb_queue_pools);
> > +		return -EINVAL;
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> > +static int
> >  fm10k_dev_configure(struct rte_eth_dev *dev)  {
> > +	int ret;
> > +
> >  	PMD_INIT_FUNC_TRACE();
> >
> >  	if (dev->data->dev_conf.rxmode.hw_strip_crc == 0)
> >  		PMD_INIT_LOG(WARNING, "fm10k always strip CRC");
> > +	/* multipe queue mode checking */
> > +	ret  = fm10k_check_mq_mode(dev);
> > +	if (ret != 0) {
> > +		PMD_DRV_LOG(ERR, "fm10k_check_mq_mode fails
> with %d.",
> > +			    ret);
> > +		return ret;
> > +	}
> >
> >  	return 0;
> >  }
  
Michael Qiu Oct. 22, 2015, 1:23 a.m. UTC | #3
On 2015/10/15 19:07, He, Shaopeng wrote:
> Hi, Michael
>
>> -----Original Message-----
>> From: Qiu, Michael
>> Sent: Thursday, October 15, 2015 2:28 PM
>> To: He, Shaopeng; dev@dpdk.org
>> Subject: Re: [dpdk-dev] [PATCH 1/3] fm10k: add multi-queue checking
>>
>> On 2015/9/30 15:29, Shaopeng He wrote:
>>> Add multi-queue checking in device configure process.
>>> Currently, VMDQ and RSS are supported.
>>>
>>> Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
>>> ---
>>>  drivers/net/fm10k/fm10k_ethdev.c | 44
>>> ++++++++++++++++++++++++++++++++++++++++
>>>  1 file changed, 44 insertions(+)
>>>
>>> diff --git a/drivers/net/fm10k/fm10k_ethdev.c
>>> b/drivers/net/fm10k/fm10k_ethdev.c
>>> index a69c990..082937d 100644
>>> --- a/drivers/net/fm10k/fm10k_ethdev.c
>>> +++ b/drivers/net/fm10k/fm10k_ethdev.c
>>> @@ -283,12 +283,56 @@ tx_queue_disable(struct fm10k_hw *hw,
>> uint16_t
>>> qnum)  }
>>>
>>>  static int
>>> +fm10k_check_mq_mode(struct rte_eth_dev *dev) {
>>> +	enum rte_eth_rx_mq_mode rx_mq_mode = dev->data-
>>> dev_conf.rxmode.mq_mode;
>>> +	struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data-
>>> dev_private);
>>> +	struct rte_eth_vmdq_rx_conf *vmdq_conf;
>>> +	uint16_t nb_rx_q = dev->data->nb_rx_queues;
>>> +
>>> +	vmdq_conf = &dev->data->dev_conf.rx_adv_conf.vmdq_rx_conf;
>>> +
>>> +	if (rx_mq_mode & ETH_MQ_RX_DCB_FLAG) {
>>> +		PMD_INIT_LOG(ERR, "DCB mode is not supported.");
>>> +		return -EINVAL;
>>> +	}
>>> +
>>> +	if (!(rx_mq_mode & ETH_MQ_RX_VMDQ_FLAG))
>>> +		return 0;
>>> +
>>> +	if (hw->mac.type == fm10k_mac_vf) {
>>> +		PMD_INIT_LOG(ERR, "VMDQ mode is not supported in VF.");
>>> +		return -EINVAL;
>>> +	}
>> I think vf check should be the first one, then we do not need check dcb and
>> VMDq flag.
>>
>> Thanks,
>> Michael
> Thanks for the comments. There is a case of RSS support on VF, if vf check be 
> the first one, it will return fail, which is not correct.

OK, you are right.

Thanks,
Michael
> Thanks,
> --Shaopeng
>>> +
>>> +	/* Check VMDQ queue pool number */
>>> +	if (vmdq_conf->nb_queue_pools >
>>> +			sizeof(vmdq_conf->pool_map[0].pools) * CHAR_BIT
>> ||
>>> +			vmdq_conf->nb_queue_pools > nb_rx_q) {
>>> +		PMD_INIT_LOG(ERR, "Too many of queue pools: %d",
>>> +			vmdq_conf->nb_queue_pools);
>>> +		return -EINVAL;
>>> +	}
>>> +
>>> +	return 0;
>>> +}
>>> +
>>> +static int
>>>  fm10k_dev_configure(struct rte_eth_dev *dev)  {
>>> +	int ret;
>>> +
>>>  	PMD_INIT_FUNC_TRACE();
>>>
>>>  	if (dev->data->dev_conf.rxmode.hw_strip_crc == 0)
>>>  		PMD_INIT_LOG(WARNING, "fm10k always strip CRC");
>>> +	/* multipe queue mode checking */
>>> +	ret  = fm10k_check_mq_mode(dev);
>>> +	if (ret != 0) {
>>> +		PMD_DRV_LOG(ERR, "fm10k_check_mq_mode fails
>> with %d.",
>>> +			    ret);
>>> +		return ret;
>>> +	}
>>>
>>>  	return 0;
>>>  }
>
  

Patch

diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index a69c990..082937d 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -283,12 +283,56 @@  tx_queue_disable(struct fm10k_hw *hw, uint16_t qnum)
 }
 
 static int
+fm10k_check_mq_mode(struct rte_eth_dev *dev)
+{
+	enum rte_eth_rx_mq_mode rx_mq_mode = dev->data->dev_conf.rxmode.mq_mode;
+	struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct rte_eth_vmdq_rx_conf *vmdq_conf;
+	uint16_t nb_rx_q = dev->data->nb_rx_queues;
+
+	vmdq_conf = &dev->data->dev_conf.rx_adv_conf.vmdq_rx_conf;
+
+	if (rx_mq_mode & ETH_MQ_RX_DCB_FLAG) {
+		PMD_INIT_LOG(ERR, "DCB mode is not supported.");
+		return -EINVAL;
+	}
+
+	if (!(rx_mq_mode & ETH_MQ_RX_VMDQ_FLAG))
+		return 0;
+
+	if (hw->mac.type == fm10k_mac_vf) {
+		PMD_INIT_LOG(ERR, "VMDQ mode is not supported in VF.");
+		return -EINVAL;
+	}
+
+	/* Check VMDQ queue pool number */
+	if (vmdq_conf->nb_queue_pools >
+			sizeof(vmdq_conf->pool_map[0].pools) * CHAR_BIT ||
+			vmdq_conf->nb_queue_pools > nb_rx_q) {
+		PMD_INIT_LOG(ERR, "Too many of queue pools: %d",
+			vmdq_conf->nb_queue_pools);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int
 fm10k_dev_configure(struct rte_eth_dev *dev)
 {
+	int ret;
+
 	PMD_INIT_FUNC_TRACE();
 
 	if (dev->data->dev_conf.rxmode.hw_strip_crc == 0)
 		PMD_INIT_LOG(WARNING, "fm10k always strip CRC");
+	/* multipe queue mode checking */
+	ret  = fm10k_check_mq_mode(dev);
+	if (ret != 0) {
+		PMD_DRV_LOG(ERR, "fm10k_check_mq_mode fails with %d.",
+			    ret);
+		return ret;
+	}
 
 	return 0;
 }