[dpdk-dev] net/ixgbe: fix LSC interrupt issue

Message ID 1494215853-3328-1-git-send-email-qi.z.zhang@intel.com (mailing list archive)
State Accepted, archived
Headers

Checks

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

Commit Message

Qi Zhang May 8, 2017, 3:57 a.m. UTC
  There is a bug in previous fix for lsc interrupt.
lsc interrupt is not disabled before delayed handler,
that cause the delayed handler be re-entered.

Fixes: 9b667210700e ("net/ixgbe: fix blocked interrupts")
Cc: stable@dpdk.org

Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
  

Comments

Wenzhuo Lu May 9, 2017, 1:15 a.m. UTC | #1
Hi Qi,

> -----Original Message-----
> From: Zhang, Qi Z
> Sent: Monday, May 8, 2017 11:58 AM
> To: Zhang, Helin; Lu, Wenzhuo
> Cc: dev@dpdk.org; Zhang, Qi Z; stable@dpdk.org
> Subject: [PATCH] net/ixgbe: fix LSC interrupt issue
> 
> There is a bug in previous fix for lsc interrupt.
> lsc interrupt is not disabled before delayed handler, that cause the delayed
> handler be re-entered.
> 
> Fixes: 9b667210700e ("net/ixgbe: fix blocked interrupts")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
> ---
>  drivers/net/ixgbe/ixgbe_ethdev.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> b/drivers/net/ixgbe/ixgbe_ethdev.c
> index ec667d8..c680aab 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -4107,14 +4107,15 @@ ixgbe_dev_interrupt_action(struct rte_eth_dev
> *dev,
>  			timeout = IXGBE_LINK_DOWN_CHECK_TIMEOUT;
> 
>  		ixgbe_dev_link_status_print(dev);
> -		intr->mask_original = intr->mask;
> -		/* only disable lsc interrupt */
> -		intr->mask &= ~IXGBE_EIMS_LSC;
>  		if (rte_eal_alarm_set(timeout * 1000,
>  				      ixgbe_dev_interrupt_delayed_handler,
> (void *)dev) < 0)
>  			PMD_DRV_LOG(ERR, "Error setting alarm");
> -		else
> -			intr->mask = intr->mask_original;
> +		else {
> +			/* remember orignal mask */
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>

Except orignal -> original
  
Thomas Monjalon May 10, 2017, 3:34 p.m. UTC | #2
09/05/2017 03:15, Lu, Wenzhuo:
> Hi Qi,
> 
> From: Zhang, Qi Z
> > 
> > There is a bug in previous fix for lsc interrupt.
> > lsc interrupt is not disabled before delayed handler, that cause the delayed
> > handler be re-entered.
> > 
> > Fixes: 9b667210700e ("net/ixgbe: fix blocked interrupts")
> > Cc: stable@dpdk.org
> > 
> > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
> 
> Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
> 
> Except orignal -> original

Applied with typo fixed, thanks
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index ec667d8..c680aab 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -4107,14 +4107,15 @@  ixgbe_dev_interrupt_action(struct rte_eth_dev *dev,
 			timeout = IXGBE_LINK_DOWN_CHECK_TIMEOUT;
 
 		ixgbe_dev_link_status_print(dev);
-		intr->mask_original = intr->mask;
-		/* only disable lsc interrupt */
-		intr->mask &= ~IXGBE_EIMS_LSC;
 		if (rte_eal_alarm_set(timeout * 1000,
 				      ixgbe_dev_interrupt_delayed_handler, (void *)dev) < 0)
 			PMD_DRV_LOG(ERR, "Error setting alarm");
-		else
-			intr->mask = intr->mask_original;
+		else {
+			/* remember orignal mask */
+			intr->mask_original = intr->mask;
+			/* only disable lsc interrupt */
+			intr->mask &= ~IXGBE_EIMS_LSC;
+		}
 	}
 
 	PMD_DRV_LOG(DEBUG, "enable intr immediately");