[dpdk-dev,v2] net/ixgbe: fix VFIO interrupt mapping in VF

Message ID 1506565713-70534-1-git-send-email-wei.dai@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Wei Dai Sept. 28, 2017, 2:28 a.m. UTC
  When a VF port is bound to VFIO-PIC, only miscellaneous interrupt
is mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
In ixgbevf_dev_start(), if previous VFIO interrupt mapping set in
eth_ixgbevf_dev_init( ) is not cleard, it will fail when calling
rte_intr_enable( ) tries to map Rx queue interrupt to other VFIO
vectors. This patch clears the VFIO interrupt mappings before
setting both miscellaneous and Rx queue interrupt mappings again
to avoid failure.

Fixes: 77234603fba0 ("net/ixgbe: support VF mailbox interrupt for link up/down")
Cc: stable@dpdk.org

Signed-off-by: Wei Dai <wei.dai@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 9 +++++++++
 1 file changed, 9 insertions(+)
  

Comments

Wei Dai Oct. 10, 2017, 3:29 a.m. UTC | #1
Hi, Jianwei 
How about your test result ?

Hi Wenzhuo
Would you please review this patch ?

Thanks a lot !

> -----Original Message-----
> From: Dai, Wei
> Sent: Thursday, September 28, 2017 10:29 AM
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; Liang, Cunming
> <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
> Cc: dev@dpdk.org; Dai, Wei <wei.dai@intel.com>; stable@dpdk.org
> Subject: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> 
> When a VF port is bound to VFIO-PIC, only miscellaneous interrupt is mapped
> to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> In ixgbevf_dev_start(), if previous VFIO interrupt mapping set in
> eth_ixgbevf_dev_init( ) is not cleard, it will fail when calling rte_intr_enable( )
> tries to map Rx queue interrupt to other VFIO vectors. This patch clears the
> VFIO interrupt mappings before setting both miscellaneous and Rx queue
> interrupt mappings again to avoid failure.
> 
> Fixes: 77234603fba0 ("net/ixgbe: support VF mailbox interrupt for link
> up/down")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Wei Dai <wei.dai@intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 9ca5cbc..f49c616 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -5046,6 +5046,15 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)
>  	}
>  	ixgbevf_configure_msix(dev);
> 
> +	/* When a VF port is bound to VFIO-PCI, only miscellaneous interrupt
> +	 * is mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> +	 * If previous VFIO interrupt mapping setting in eth_ixgbevf_dev_init( )
> +	 * is not cleared, it will fail when following rte_intr_enable( ) tries
> +	 * to map Rx queue interrupt to other VFIO vectors.
> +	 * So clear uio/vfio intr/evevnfd first to avoid failure.
> +	 */
> +	rte_intr_disable(intr_handle);
> +
>  	rte_intr_enable(intr_handle);
> 
>  	/* Re-enable interrupt for VF */
> --
> 2.7.5
  
Wenzhuo Lu Oct. 11, 2017, 3:16 a.m. UTC | #2
Hi,

> -----Original Message-----
> From: Dai, Wei
> Sent: Thursday, September 28, 2017 10:29 AM
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; Liang, Cunming
> <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
> Cc: dev@dpdk.org; Dai, Wei <wei.dai@intel.com>; stable@dpdk.org
> Subject: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> 
> When a VF port is bound to VFIO-PIC, only miscellaneous interrupt is
> mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> In ixgbevf_dev_start(), if previous VFIO interrupt mapping set in
> eth_ixgbevf_dev_init( ) is not cleard, it will fail when calling rte_intr_enable( )
> tries to map Rx queue interrupt to other VFIO vectors. This patch clears the
> VFIO interrupt mappings before setting both miscellaneous and Rx queue
> interrupt mappings again to avoid failure.
> 
> Fixes: 77234603fba0 ("net/ixgbe: support VF mailbox interrupt for link
> up/down")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Wei Dai <wei.dai@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
  
Wei Dai Oct. 11, 2017, 7:07 a.m. UTC | #3
I look through from web browser and not find following mail from Jianwei Ma <Jianwei.ma@intel.com>
Hope this can add his test result in the mail list to community.

> -----Original Message-----
> From: Ma, Jianwei
> Sent: Tuesday, October 10, 2017 4:47 PM
> To: Dai, Wei <wei.dai@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>;
> Ananyev, Konstantin <konstantin.ananyev@intel.com>; Liang, Cunming
> <cunming.liang@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: RE: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> 
> Verified with l3fwd-power. It worked well with this patch plus
> http://dpdk.org/dev/patchwork/patch/29000/  " [dpdk-dev] net/ixgbe: fix
> Rx queue interrupt mapping in VF"
> 
> -----Original Message-----
> From: Dai, Wei
> Sent: Tuesday, October 10, 2017 11:30
> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; Liang, Cunming
> <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: RE: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> 
> Hi, Jianwei
> How about your test result ?
> 
> Hi Wenzhuo
> Would you please review this patch ?
> 
> Thanks a lot !
> 
> > -----Original Message-----
> > From: Dai, Wei
> > Sent: Thursday, September 28, 2017 10:29 AM
> > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> > <konstantin.ananyev@intel.com>; Liang, Cunming
> > <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
> > Cc: dev@dpdk.org; Dai, Wei <wei.dai@intel.com>; stable@dpdk.org
> > Subject: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> >
> > When a VF port is bound to VFIO-PIC, only miscellaneous interrupt is
> > mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> > In ixgbevf_dev_start(), if previous VFIO interrupt mapping set in
> > eth_ixgbevf_dev_init( ) is not cleard, it will fail when calling
> > rte_intr_enable( ) tries to map Rx queue interrupt to other VFIO
> > vectors. This patch clears the VFIO interrupt mappings before setting
> > both miscellaneous and Rx queue interrupt mappings again to avoid
> failure.
> >
> > Fixes: 77234603fba0 ("net/ixgbe: support VF mailbox interrupt for link
> > up/down")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Wei Dai <wei.dai@intel.com>
> Tested-by: Jianwei Ma <Jianwei.ma@intel.com>
> > ---
> >  drivers/net/ixgbe/ixgbe_ethdev.c | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> >
> > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > index 9ca5cbc..f49c616 100644
> > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> > @@ -5046,6 +5046,15 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)
> >  	}
> >  	ixgbevf_configure_msix(dev);
> >
> > +	/* When a VF port is bound to VFIO-PCI, only miscellaneous interrupt
> > +	 * is mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> > +	 * If previous VFIO interrupt mapping setting in eth_ixgbevf_dev_init( )
> > +	 * is not cleared, it will fail when following rte_intr_enable( ) tries
> > +	 * to map Rx queue interrupt to other VFIO vectors.
> > +	 * So clear uio/vfio intr/evevnfd first to avoid failure.
> > +	 */
> > +	rte_intr_disable(intr_handle);
> > +
> >  	rte_intr_enable(intr_handle);
> >
> >  	/* Re-enable interrupt for VF */
> > --
> > 2.7.5
  
Wei Dai Oct. 11, 2017, 7:22 a.m. UTC | #4
Reply for correct mail format.

> -----Original Message-----
> From: Dai, Wei
> Sent: Wednesday, October 11, 2017 3:07 PM
> To: Ma, Jianwei <jianwei.ma@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; Liang, Cunming
> <cunming.liang@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: RE: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> 
> I look through from web browser and not find following mail from Jianwei
> Ma <Jianwei.ma@intel.com> Hope this can add his test result in the mail list
> to community.
> 
> > -----Original Message-----
> > From: Ma, Jianwei
> > Sent: Tuesday, October 10, 2017 4:47 PM
> > To: Dai, Wei <wei.dai@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>;
> > Ananyev, Konstantin <konstantin.ananyev@intel.com>; Liang, Cunming
> > <cunming.liang@intel.com>
> > Cc: dev@dpdk.org; stable@dpdk.org
> > Subject: RE: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> >
> > Verified with l3fwd-power. It worked well with this patch plus
> > http://dpdk.org/dev/patchwork/patch/29000/  " [dpdk-dev] net/ixgbe:
> > fix Rx queue interrupt mapping in VF"
> >
> > -----Original Message-----
> > From: Dai, Wei
> > Sent: Tuesday, October 10, 2017 11:30
> > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> > <konstantin.ananyev@intel.com>; Liang, Cunming
> > <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
> > Cc: dev@dpdk.org; stable@dpdk.org
> > Subject: RE: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> >
> > Hi, Jianwei
> > How about your test result ?
> >
> > Hi Wenzhuo
> > Would you please review this patch ?
> >
> > Thanks a lot !
> >
> > > -----Original Message-----
> > > From: Dai, Wei
> > > Sent: Thursday, September 28, 2017 10:29 AM
> > > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
> > > <konstantin.ananyev@intel.com>; Liang, Cunming
> > > <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
> > > Cc: dev@dpdk.org; Dai, Wei <wei.dai@intel.com>; stable@dpdk.org
> > > Subject: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
> > >
> > > When a VF port is bound to VFIO-PIC, only miscellaneous interrupt is
> > > mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> > > In ixgbevf_dev_start(), if previous VFIO interrupt mapping set in
> > > eth_ixgbevf_dev_init( ) is not cleard, it will fail when calling
> > > rte_intr_enable( ) tries to map Rx queue interrupt to other VFIO
> > > vectors. This patch clears the VFIO interrupt mappings before
> > > setting both miscellaneous and Rx queue interrupt mappings again to
> > > avoid
> > failure.
> > >
> > > Fixes: 77234603fba0 ("net/ixgbe: support VF mailbox interrupt for
> > > link
> > > up/down")
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: Wei Dai <wei.dai@intel.com>
Tested-by: Jianwei Ma <Jianwei.ma@intel.com>
> > > ---
> > >  drivers/net/ixgbe/ixgbe_ethdev.c | 9 +++++++++
> > >  1 file changed, 9 insertions(+)
> > >
> > > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > > index 9ca5cbc..f49c616 100644
> > > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> > > @@ -5046,6 +5046,15 @@ ixgbevf_dev_start(struct rte_eth_dev *dev)
> > >  	}
> > >  	ixgbevf_configure_msix(dev);
> > >
> > > +	/* When a VF port is bound to VFIO-PCI, only miscellaneous
> interrupt
> > > +	 * is mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
> > > +	 * If previous VFIO interrupt mapping setting in
> eth_ixgbevf_dev_init( )
> > > +	 * is not cleared, it will fail when following rte_intr_enable( ) tries
> > > +	 * to map Rx queue interrupt to other VFIO vectors.
> > > +	 * So clear uio/vfio intr/evevnfd first to avoid failure.
> > > +	 */
> > > +	rte_intr_disable(intr_handle);
> > > +
> > >  	rte_intr_enable(intr_handle);
> > >
> > >  	/* Re-enable interrupt for VF */
> > > --
> > > 2.7.5
  
Ferruh Yigit Oct. 11, 2017, 6:24 p.m. UTC | #5
On 10/11/2017 4:16 AM, Lu, Wenzhuo wrote:
> Hi,
> 
>> -----Original Message-----
>> From: Dai, Wei
>> Sent: Thursday, September 28, 2017 10:29 AM
>> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Ananyev, Konstantin
>> <konstantin.ananyev@intel.com>; Liang, Cunming
>> <cunming.liang@intel.com>; Ma, Jianwei <jianwei.ma@intel.com>
>> Cc: dev@dpdk.org; Dai, Wei <wei.dai@intel.com>; stable@dpdk.org
>> Subject: [PATCH v2] net/ixgbe: fix VFIO interrupt mapping in VF
>>
>> When a VF port is bound to VFIO-PIC, only miscellaneous interrupt is
>> mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
>> In ixgbevf_dev_start(), if previous VFIO interrupt mapping set in
>> eth_ixgbevf_dev_init( ) is not cleard, it will fail when calling rte_intr_enable( )
>> tries to map Rx queue interrupt to other VFIO vectors. This patch clears the
>> VFIO interrupt mappings before setting both miscellaneous and Rx queue
>> interrupt mappings again to avoid failure.
>>
>> Fixes: 77234603fba0 ("net/ixgbe: support VF mailbox interrupt for link
>> up/down")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Wei Dai <wei.dai@intel.com>
> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 9ca5cbc..f49c616 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -5046,6 +5046,15 @@  ixgbevf_dev_start(struct rte_eth_dev *dev)
 	}
 	ixgbevf_configure_msix(dev);
 
+	/* When a VF port is bound to VFIO-PCI, only miscellaneous interrupt
+	 * is mapped to VFIO vector 0 in eth_ixgbevf_dev_init( ).
+	 * If previous VFIO interrupt mapping setting in eth_ixgbevf_dev_init( )
+	 * is not cleared, it will fail when following rte_intr_enable( ) tries
+	 * to map Rx queue interrupt to other VFIO vectors.
+	 * So clear uio/vfio intr/evevnfd first to avoid failure.
+	 */
+	rte_intr_disable(intr_handle);
+
 	rte_intr_enable(intr_handle);
 
 	/* Re-enable interrupt for VF */