From patchwork Fri Jun 16 11:37:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 25409 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id A51C95323; Fri, 16 Jun 2017 13:38:07 +0200 (CEST) Received: from mail-wr0-f182.google.com (mail-wr0-f182.google.com [209.85.128.182]) by dpdk.org (Postfix) with ESMTP id 4B5F03251 for ; Fri, 16 Jun 2017 13:38:06 +0200 (CEST) Received: by mail-wr0-f182.google.com with SMTP id r103so37116322wrb.0 for ; Fri, 16 Jun 2017 04:38:06 -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=OARct4ad6O394dD+Po7fEFX2AnyH1Ckqss0hUkXBisYx1eH61f+djE+1UQ+RZtxZZU ICSlJ93+t744MD8EMbK49VafQsXgV9Qo/jQdnvaU5RkydCk9bkbzigUfemihbMDiIIAc LhJfRCzXBySvsQrEbunnFqU/bxaXoFtmuGTjNUTCybjwrMw1kKsEHOmepytA8gc+U0eQ hTyGqOGuORT/lY6JjCoo3iy/W0jQ6zBcPe7zsxisxExlxfEeowV9HK3n4nQMp2pF6H4I 8zAvF2yKbjBQynsXF4TT3bY5P0drYkMlfqlk2hHIO17y6jXYtC8BrweQHxwxEPjf5CZY VDgw== X-Gm-Message-State: AKS2vOyM2QzvP8EeMRuFvYC+G4h+JUOuqZAsuP/Rg0dRAOgq0waov6v1 2+VljVZfu45v0eUwLpo= 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-dev] [PATCH] net/mlx4: fix assertion failure on link update X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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))