[dpdk-dev] [PATCH v2] net/i40e: fix wrong handle when enable interrupt

Zhang, Qi Z qi.z.zhang at intel.com
Tue Mar 21 12:34:08 CET 2017


Hi Thomas:
	

> -----Original Message-----
> From: Zhang, Qi Z
> Sent: Tuesday, March 21, 2017 8:10 PM
> To: Wu, Jingjing <jingjing.wu at intel.com>; Zhang, Helin
> <helin.zhang at intel.com>
> Cc: dev at dpdk.org; Zhang, Qi Z <qi.z.zhang at intel.com>; stable at dpdk.org
> Subject: [PATCH v2] net/i40e: fix wrong handle when enable interrupt
> 
> In i40e_dev_interrupt_handler, when call rte_intr_enable, the intr_handle is
> the copy when we registered.
> According to interrupt handle framework, if the requirement of intr_handle
> is changed, we need to unregister then register a new copy. This happens on
> i40e driver when bind to vfio-pci, the rte_intr_efd_enable function will
> modify the max_intr according the queue number, so a new copy of
> intr_handle need to be registered.
> Without this fix, we saw lw3fwd-power does not work due to wrong
> interrupt count in vfio_irq_set when set vfio interrupt.
> 
> Fixes: 2ce7a1ed09fc ("net/i40e: localize mapping of ethdev to PCI device")
> 
> Cc: stable at dpdk.org
> 
> Signed-off-by: Qi Zhang <qi.z.zhang at intel.com>
> ---
> v2:
> - follow current design, when intr_handle is modified, unregister
>   the old one and register the new one.
> - there should be a patch set to fix on other devices.
> 
>  drivers/net/i40e/i40e_ethdev.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 9c76baa..e7bbea5 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -1886,6 +1886,14 @@ i40e_dev_start(struct rte_eth_dev *dev)
>  		ret = rte_intr_efd_enable(intr_handle, intr_vector);
>  		if (ret)
>  			return ret;
> +		 /**
> +		  * intr_handle may be modified in rte_intr_efd_enable
> +		  * so unregster the old one and register the new one.
> +		  */
> +		rte_intr_callback_unregister(intr_handle,
> +			i40e_dev_interrupt_handler, dev);
> +		rte_intr_callback_register(intr_handle,
> +			i40e_dev_interrupt_handler, dev);
To me, this fix looks a little bit weird.
May I know why we need to register an copy of intr_handle ?
What do you think about my previous clean up patch.
http://dpdk.org/dev/patchwork/patch/21529/
Thanks
Qi.
>  	}
> 
>  	if (rte_intr_dp_is_en(intr_handle) && !intr_handle->intr_vec) {
> --
> 2.9.3


More information about the dev mailing list