[dpdk-dev] [PATCH] net/iavf: fix vertor interrupt number configuration error

Stillwell Jr, Paul M paul.m.stillwell.jr at intel.com
Tue Mar 19 05:16:41 CET 2019


> -----Original Message-----
> From: dev <dev-bounces at dpdk.org> On Behalf Of Wei Zhao
> Sent: Monday, March 18, 2019 8:05 PM
> To: dev at dpdk.org
> Cc: stable at dpdk.org; Zhang, Qi Z <qi.z.zhang at intel.com>; Zhao1, Wei
> <wei.zhao1 at intel.com>
> Subject: [dpdk-dev] [PATCH] net/iavf: fix vertor interrupt number
> configuration error
> 

Should the patch name be net/avf?

> There is a issue when iavf do vertor interrupt configuration, it will miss one
> interrupt vector which set admin queue interrupt when communicate with
> host pf.
> 

I would reword this to be clearer, something like:

The AVF driver needs to send an extra vector number to the Linux PF to
Work around an issue with interrupt vector mapping. The admin queue
needs to be added to the number of queues sent to the PF.

> Fixes: 69dd4c3d0898 ("net/avf: enable queue and device")
> Cc: stable at dpdk.org
> 
> Signed-off-by: Wei Zhao <wei.zhao1 at intel.com>
> Signed-off-by: Zhao Wei <wei.zhao1 at intel.com>
> ---
>  drivers/net/iavf/iavf_ethdev.c | 4 ++--  drivers/net/iavf/iavf_vchnl.c  | 8
> +++++++-
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
> index 846e604..49c9499 100644
> --- a/drivers/net/iavf/iavf_ethdev.c
> +++ b/drivers/net/iavf/iavf_ethdev.c
> @@ -308,7 +308,7 @@ static int iavf_config_rx_queues_irqs(struct
> rte_eth_dev *dev,
>  	if (!dev->data->dev_conf.intr_conf.rxq ||
>  	    !rte_intr_dp_is_en(intr_handle)) {
>  		/* Rx interrupt disabled, Map interrupt only for writeback */
> -		vf->nb_msix = 1;
> +		vf->nb_msix = 2;
>  		if (vf->vf_res->vf_cap_flags &
>  		    VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) {
>  			/* If WB_ON_ITR supports, enable it */ @@ -338,7
> +338,7 @@ static int iavf_config_rx_queues_irqs(struct rte_eth_dev *dev,
>  			vf->rxq_map[vf->msix_base] |= 1 << i;
>  	} else {
>  		if (!rte_intr_allow_others(intr_handle)) {
> -			vf->nb_msix = 1;
> +			vf->nb_msix = 2;
>  			vf->msix_base = IAVF_MISC_VEC_ID;
>  			for (i = 0; i < dev->data->nb_rx_queues; i++) {
>  				vf->rxq_map[vf->msix_base] |= 1 << i; diff --
> git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c index
> 6381fb6..d9a376e 100644
> --- a/drivers/net/iavf/iavf_vchnl.c
> +++ b/drivers/net/iavf/iavf_vchnl.c
> @@ -609,7 +609,7 @@ iavf_config_irq_map(struct iavf_adapter *adapter)
>  		return -ENOMEM;
> 
>  	map_info->num_vectors = vf->nb_msix;
> -	for (i = 0; i < vf->nb_msix; i++) {
> +	for (i = 0; i < vf->nb_msix - 1; i++) {
>  		vecmap = &map_info->vecmap[i];
>  		vecmap->vsi_id = vf->vsi_res->vsi_id;
>  		vecmap->rxitr_idx = IAVF_ITR_INDEX_DEFAULT; @@ -618,6
> +618,12 @@ iavf_config_irq_map(struct iavf_adapter *adapter)
>  		vecmap->rxq_map = vf->rxq_map[vf->msix_base + i];
>  	}
> 
> +	vecmap = &map_info->vecmap[i];
> +	vecmap->vsi_id = vf->vsi_res->vsi_id;
> +	vecmap->vector_id = 0;
> +	vecmap->txq_map = 0;
> +	vecmap->rxq_map = 0;
> +
>  	args.ops = VIRTCHNL_OP_CONFIG_IRQ_MAP;
>  	args.in_args = (u8 *)map_info;
>  	args.in_args_size = len;
> --
> 2.7.5



More information about the dev mailing list