[dpdk-dev] net/ixgbe: fix LSC interrupt issue
Checks
Commit Message
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
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
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
@@ -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");