From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7AE89A0518 for ; Fri, 24 Jul 2020 14:09:39 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 749AF1C039; Fri, 24 Jul 2020 14:09:39 +0200 (CEST) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by dpdk.org (Postfix) with ESMTP id E4E441C039 for ; Fri, 24 Jul 2020 14:09:38 +0200 (CEST) Received: by mail-wr1-f67.google.com with SMTP id b6so8082489wrs.11 for ; Fri, 24 Jul 2020 05:09:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NkwoiSnj8lvAh2d+a8PAZl+DIUZ5ZAMpGBMP4kBUEVU=; b=ZF9gppjJ52YkUKweIoNQadTYocKChzk7YpHLRxCBGqYXmQ7Fsw30UC9vci6nu+xwdj aqcdiKnZ7dT7FIvhYS/2zik8rOecs9Rd9Z/qXOEss0ET9d6uvXt7eHeU23VGX67NhTy5 2t4gWWa+si+eEvNWNjCxHe+mXjWjrRDwWMmVIgCJgYHUKPwo3w09lq1sPy32nj6fBJfx qI2QbdaS8/nDAAMbIymlSe0KTo3nCd2e4wIBd+4S/KMwp5b/nWaoiFxSVHyy1ZepQ8X2 cy/MR4u6Af0keNfewYnhuNDIx1d9pEeECmfxo58+MW1l/UEkNQdky4ajcT9JzSbQZblv 5YRw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=NkwoiSnj8lvAh2d+a8PAZl+DIUZ5ZAMpGBMP4kBUEVU=; b=BS/blbTIPdEw+2OV3NwgAfUFYE1dg6TpmGw4p2LENI8NFUtOMutJl9ldgAYwiFX6oD /WqIlnp/HK+R5ohpBZg1WTTJgMfsP/ABleIC4GmcJYqqaqoVv+D8RFCvCJFr/Vl8lJ5V GbIm4lApTEiBYniHq1PGSiHr/t9fhPehcBp3So6UlcitAS7vgwwl1ohCNmpD0yqqZdqP FX/1k2VSojMSBfjr9jT2V2jtMFtY0TVtfDctnXVUN6OHJFETFfNCp4c30+7NBKnT9n3E Uqm4HKrnLavMNnGI+0QwGyEZ0K9MFc5m9lMCS9oNA+gLxwLqt2/msAlqJdNgp20gzzJG C80w== X-Gm-Message-State: AOAM531HyNjd7Z6aL0t4yLPFmcdyp+yMEjXNIEZkrVAW5hhzc4l+8YHV 5LeoiKVBepppahPjyglI0vE= X-Google-Smtp-Source: ABdhPJwjgDI/ao0h1TVKBstxAwxAhuWFMYvjbGeFsEHo30N25Vq0G/NZfabZNkWSx52lEnNAJsw6pQ== X-Received: by 2002:adf:e486:: with SMTP id i6mr8214596wrm.258.1595592578617; Fri, 24 Jul 2020 05:09:38 -0700 (PDT) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id a123sm7528871wmd.28.2020.07.24.05.09.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 05:09:38 -0700 (PDT) From: luca.boccassi@gmail.com To: Guinan Sun Cc: Robert Konklewski , Wei Zhao , dpdk stable Date: Fri, 24 Jul 2020 12:59:34 +0100 Message-Id: <20200724120030.1863487-136-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200724120030.1863487-1-luca.boccassi@gmail.com> References: <20200724120030.1863487-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/ixgbe/base: fix infinite recursion on PCIe link down' has been queued to stable release 19.11.4 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: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 19.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/26/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Luca Boccassi --- >From fc6dfa05e7df26dd246597fc8ab3a0f6c7d88f54 Mon Sep 17 00:00:00 2001 From: Guinan Sun Date: Thu, 9 Jul 2020 08:00:31 +0000 Subject: [PATCH] net/ixgbe/base: fix infinite recursion on PCIe link down [ upstream commit 2d04b9e856125197ec8e967471426d56ab7efcf0 ] In some corner cases the functions ixgbe_clear_rar_generic and ixgbe_clear_vmdq_generic may call one another leading to infinite recursion. When ixgbe_clear_vmdq_generic is called with IXGBE_CLEAR_VMDQ_ALL flag, it's going to clear MPSAR registers, and proceed to call ixgbe_clear_rar_generic, which in turn will clear the RAR registers, and recursively call back ixgbe_clear_vmdq_generic. Normally, the latter would detect that MPSAR registers have already been cleared and terminate the recursion. However, when PCIe link is down, and before the driver has had the opportunity to shut itself down, all register reads return 0xFFFFFFFF, and all register writes fail silently. In such case, because ixgbe_clear_vmdq_generic blindly assumes that clearing MPSAR registers succeeded, it's going to always call ixgbe_clear_rar_generic, which in turn will always call back ixgbe_clear_vmdq_generic, creating infinite recursion. This patch re-reads MPSAR register values after they had been cleared. In case of PCIe link failure, the values read will be non-zero, which will terminate the recursion. On the other hand, under normal circumstances the value read from MPSAR registers is going to be equal to the value previously written, so this patch is expected not to cause any regressions. Fixes: af75078fece3 ("first public release") Signed-off-by: Robert Konklewski Signed-off-by: Guinan Sun Reviewed-by: Wei Zhao --- drivers/net/ixgbe/base/ixgbe_common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c index 5889410f9..9e7182eb3 100644 --- a/drivers/net/ixgbe/base/ixgbe_common.c +++ b/drivers/net/ixgbe/base/ixgbe_common.c @@ -3777,11 +3777,11 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq) if (vmdq == IXGBE_CLEAR_VMDQ_ALL) { if (mpsar_lo) { IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0); - mpsar_lo = 0; + mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar)); } if (mpsar_hi) { IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0); - mpsar_hi = 0; + mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar)); } } else if (vmdq < 32) { mpsar_lo &= ~(1 << vmdq); -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-07-24 12:53:53.781962217 +0100 +++ 0136-net-ixgbe-base-fix-infinite-recursion-on-PCIe-link-d.patch 2020-07-24 12:53:48.439009292 +0100 @@ -1,8 +1,10 @@ -From 2d04b9e856125197ec8e967471426d56ab7efcf0 Mon Sep 17 00:00:00 2001 +From fc6dfa05e7df26dd246597fc8ab3a0f6c7d88f54 Mon Sep 17 00:00:00 2001 From: Guinan Sun Date: Thu, 9 Jul 2020 08:00:31 +0000 Subject: [PATCH] net/ixgbe/base: fix infinite recursion on PCIe link down +[ upstream commit 2d04b9e856125197ec8e967471426d56ab7efcf0 ] + In some corner cases the functions ixgbe_clear_rar_generic and ixgbe_clear_vmdq_generic may call one another leading to infinite recursion. @@ -30,7 +32,6 @@ any regressions. Fixes: af75078fece3 ("first public release") -Cc: stable@dpdk.org Signed-off-by: Robert Konklewski Signed-off-by: Guinan Sun @@ -40,7 +41,7 @@ 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c -index fec6241f5..2d848a02b 100644 +index 5889410f9..9e7182eb3 100644 --- a/drivers/net/ixgbe/base/ixgbe_common.c +++ b/drivers/net/ixgbe/base/ixgbe_common.c @@ -3777,11 +3777,11 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)