From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f171.google.com (mail-wr0-f171.google.com [209.85.128.171]) by dpdk.org (Postfix) with ESMTP id 26BD92BD1 for ; Fri, 16 Jun 2017 13:38:05 +0200 (CEST) Received: by mail-wr0-f171.google.com with SMTP id 36so36779255wry.3 for ; Fri, 16 Jun 2017 04:38:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=BQsJn49i+ipyXOGzH27QOvZMb52A50V7hrovXupI7FQ=; b=ZNJG1Mr0okuW3pQRq380V6r5pDMmU+UfJ6K+JHhTe9uogSKAidoLL7Vvf3X0lJZOrY 4bpKH/5n8/pJPuCq4WRy3YG/XMMo8yB/P3UIS4TG5UShLRehOq7dC1dkd10znQHFR7ls g129YdNAhXmBR+xUGgX4+nBdBKkyNKq9QtsQ5MtytM4BKnVUdO8BUQNJWTniFYTpE7Y0 5QwldZ19fhZ+YxCIz1W7m0sAOTbGnZAVOYOu+taotacOIsmHh+ZI2gCeClxL7KSFtzh+ +/nxmugsA4USEwxAuwhavWgm39aG8Lxlulpw8OBmsc16TEPkN2mTETnh6F5Hs2CodljR 93cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=BQsJn49i+ipyXOGzH27QOvZMb52A50V7hrovXupI7FQ=; b=mIoZ2JfsZLj56XDhjbaMMhrgO8o++apSHDxfdxIXfpxXss/VILHLgOwedcli43yP8w DdGLUholYWOmGiCh99j8FPH9WIo1zZNT2s9Xh0zWILmRJQG+J3kJbAHnTcv3kgEvNVdW 1WmuvkRNu/X/65aRywLkGyjKPdzhg7C6pvzaiS8nQZ1Nzf2Xb6KmwD9pss8jpM4yrTF1 gPDRERFYl8HKtTIWB0qqtaSsBboA2d7FeTc3SvdPgES06D1BDKF/q0HEabEUUZpE1zru 7XJO8vRyJRS84uRqXfA/7Us31XFB5HvUssp/LhBK0vALh3qNlUC3a5GVyFb6l3Ko6tXi zzxA== X-Gm-Message-State: AKS2vOwcX6ZMRxnYOrCc5cMY6AggYTlN4+1LPMriATdbFHT/QgzFPz/E ED+iMd5T/OPR+pwM X-Received: by 10.223.183.11 with SMTP id l11mr6723760wre.115.1497613085642; Fri, 16 Jun 2017 04:38:05 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id c55sm1589174wrc.7.2017.06.16.04.38.04 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 16 Jun 2017 04:38:04 -0700 (PDT) From: Adrien Mazarguil To: dev@dpdk.org Cc: Nelio Laranjeiro , stable@dpdk.org Date: Fri, 16 Jun 2017 13:37:51 +0200 Message-Id: <65558157617347425cf24c77864f84fa72423131.1497612960.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 Subject: [dpdk-stable] [PATCH] net/mlx4: fix assertion failure on link update X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Jun 2017 11:38:06 -0000 The interrupt handler can sometimes be triggered for reasons other than a link status event. An assertion failure happen when such events occur while an asynchronous link status update is already scheduled. Address this issue using the same approach as its mlx5 counterpart, commit a9f2fbc42f0c ("net/mlx5: fix inconsistent link status") Fixes: c4da6caa426d ("mlx4: handle link status interrupts") Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro --- drivers/net/mlx4/mlx4.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 050d646..57b52ac 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -5343,6 +5343,7 @@ priv_dev_status_handler(struct priv *priv, struct rte_eth_dev *dev, { struct ibv_async_event event; int port_change = 0; + struct rte_eth_link *link = &dev->data->dev_link; int ret = 0; *events = 0; @@ -5364,22 +5365,20 @@ priv_dev_status_handler(struct priv *priv, struct rte_eth_dev *dev, event.event_type, event.element.port_num); ibv_ack_async_event(&event); } - - if (port_change ^ priv->pending_alarm) { - struct rte_eth_link *link = &dev->data->dev_link; - - priv->pending_alarm = 0; - mlx4_link_update(dev, 0); - if (((link->link_speed == 0) && link->link_status) || - ((link->link_speed != 0) && !link->link_status)) { + if (!port_change) + return ret; + mlx4_link_update(dev, 0); + if (((link->link_speed == 0) && link->link_status) || + ((link->link_speed != 0) && !link->link_status)) { + if (!priv->pending_alarm) { /* Inconsistent status, check again later. */ priv->pending_alarm = 1; rte_eal_alarm_set(MLX4_ALARM_TIMEOUT_US, mlx4_dev_link_status_handler, dev); - } else { - *events |= (1 << RTE_ETH_EVENT_INTR_LSC); } + } else { + *events |= (1 << RTE_ETH_EVENT_INTR_LSC); } return ret; } @@ -5400,6 +5399,7 @@ mlx4_dev_link_status_handler(void *arg) priv_lock(priv); assert(priv->pending_alarm == 1); + priv->pending_alarm = 0; ret = priv_dev_status_handler(priv, dev, &events); priv_unlock(priv); if (ret > 0 && events & (1 << RTE_ETH_EVENT_INTR_LSC)) -- 2.1.4