From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 851F5A00C2 for ; Thu, 3 Nov 2022 10:32:12 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 81C3040694; Thu, 3 Nov 2022 10:32:12 +0100 (CET) Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by mails.dpdk.org (Postfix) with ESMTP id D425A40693 for ; Thu, 3 Nov 2022 10:32:11 +0100 (CET) Received: by mail-wm1-f44.google.com with SMTP id ay14-20020a05600c1e0e00b003cf6ab34b61so2874898wmb.2 for ; Thu, 03 Nov 2022 02:32:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SRFHUhNelX1ZVuqIeyDRnSyyEwot8TI7cHn6HukXdHw=; b=PRSWeCqGQXwZuhsSjd6qdLu2gnzr3G2p197rESmPtnIsIXSHgEiQdhida3Al0HnP1Z LOcFBXXKd+QxnSJwDT3xni751d6RyQ9YBG3feOKGxVUznbCJF7ZK1oWr4fYbI0ocg2W6 WmvQKxj+1Kl8u/5h+PVmn0qeV7vtwsv7YeLICAEIDph6MzWJZQ3bapZ1yIHAtFdNr5nd RWopIZ1n1eAmrUdrPvASxtHr+3eKhQY16oDyZnb4+nLW5vfH6XcikQVn9BEf1J7YOP54 Nz4P2hYgGoMfgOMJpm8T5XHUqQETbDtQyAr03DJT7n9Ohw7sLsuG0oN3pTJHa3fPZlB7 TZWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SRFHUhNelX1ZVuqIeyDRnSyyEwot8TI7cHn6HukXdHw=; b=Z2i1aEwagk/WmRZxk/Eleo/kQj0MF/g/tqPuABW6iTESF61jNobQmIDpqcxXQ4MeAd Wz5tw4PJpjvyjtQt6VQ8sacT7aEezuGK1z9HZlpn1BkCnPK3Xp5+1ErU5cimYFDbNfbm Pty3nINiLE+m+hBHFgRqCeYRtGq5xKM0z4kAcc2v+I+975aTNU7F6YB7d+M/PiljKGiJ 6e2V7d4myOAS0ahtK9YacMXhQqm7mkHqTmt/gTNgbyd4i9P38E15QsXOZ2xZCxroidfS yBkYgWf3wsjYBRJbBhcme0sZqE//429tdfZjxm587rxobJvXfFroIx8nTuKn3BKjO9Eb YyTA== X-Gm-Message-State: ACrzQf3Qrjn/T4iS2x/AjSA+tlIJkqMCnUP4wVdlLiuiX+HVakLIJoYq Oigh32+98gtrF37cM55DwJikMQTsOki84FRu X-Google-Smtp-Source: AMsMyM7cQLoNHTdii2BZAZMOXPRUDNNcfWiK+7UxSC7e6cMrhWYmX+/lQMHkyyIs5mZ8YhwKKqxxlw== X-Received: by 2002:a05:600c:1f11:b0:3cf:73f0:b753 with SMTP id bd17-20020a05600c1f1100b003cf73f0b753mr12396298wmb.100.1667467931465; Thu, 03 Nov 2022 02:32:11 -0700 (PDT) Received: from localhost ([137.220.119.58]) by smtp.gmail.com with ESMTPSA id ay19-20020a5d6f13000000b00236545edc91sm383042wrb.76.2022.11.03.02.32.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Nov 2022 02:32:11 -0700 (PDT) From: luca.boccassi@gmail.com To: Chengwen Feng Cc: Dongdong Liu , dpdk stable Subject: patch 'net/hns3: fix crash when secondary process access FW' has been queued to stable release 20.11.7 Date: Thu, 3 Nov 2022 09:27:33 +0000 Message-Id: <20221103092758.1099402-75-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221103092758.1099402-1-luca.boccassi@gmail.com> References: <20221103092758.1099402-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 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 Hi, FYI, your patch has been queued to stable release 20.11.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/05/22. 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. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/dfb7b1acec2b9889be3a263d5472180d41aae795 Thanks. Luca Boccassi --- >From dfb7b1acec2b9889be3a263d5472180d41aae795 Mon Sep 17 00:00:00 2001 From: Chengwen Feng Date: Mon, 5 Sep 2022 16:59:36 +0800 Subject: [PATCH] net/hns3: fix crash when secondary process access FW [ upstream commit a8f1f7cf1b429c3b95fa94f794f697a30f4c482d ] Currently, to prevent missing reporting of reset interrupts and quickly identify reset interrupts, the following logic is designed in the FW (firmware) command interface hns3_cmd_send: if an unprocessed interrupt exist (by checking reset registers), related reset task is scheduled. The secondary process may invoke the hns3_cmd_send interface (e.g. using proc-info query some stats). Unfortunately, the secondary process does not support reset processing, and a segment fault may occur if it schedules reset task. Fix it by limit the checking and scheduling of reset under only primary process. Fixes: 2790c6464725 ("net/hns3: support device reset") Signed-off-by: Chengwen Feng Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_ethdev.c | 10 +++++++++- drivers/net/hns3/hns3_ethdev_vf.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index 693b256ffb..eb075c8331 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -5458,7 +5458,15 @@ hns3_is_reset_pending(struct hns3_adapter *hns) struct hns3_hw *hw = &hns->hw; enum hns3_reset_level reset; - hns3_check_event_cause(hns, NULL); + /* + * Check the registers to confirm whether there is reset pending. + * Note: This check may lead to schedule reset task, but only primary + * process can process the reset event. Therefore, limit the + * checking under only primary process. + */ + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + hns3_check_event_cause(hns, NULL); + reset = hns3_get_reset_level(hns, &hw->reset.pending); if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) { hns3_warn(hw, "High level reset %d is pending", reset); diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index c1cf7a8c60..be6e37d4b4 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -2316,8 +2316,15 @@ hns3vf_is_reset_pending(struct hns3_adapter *hns) if (hw->reset.level == HNS3_VF_FULL_RESET) return false; - /* Check the registers to confirm whether there is reset pending */ - hns3vf_check_event_cause(hns, NULL); + /* + * Check the registers to confirm whether there is reset pending. + * Note: This check may lead to schedule reset task, but only primary + * process can process the reset event. Therefore, limit the + * checking under only primary process. + */ + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + hns3vf_check_event_cause(hns, NULL); + reset = hns3vf_get_reset_level(hw, &hw->reset.pending); if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) { hns3_warn(hw, "High level reset %d is pending", reset); -- 2.34.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-11-03 09:27:29.899932084 +0000 +++ 0075-net-hns3-fix-crash-when-secondary-process-access-FW.patch 2022-11-03 09:27:25.513425150 +0000 @@ -1 +1 @@ -From a8f1f7cf1b429c3b95fa94f794f697a30f4c482d Mon Sep 17 00:00:00 2001 +From dfb7b1acec2b9889be3a263d5472180d41aae795 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit a8f1f7cf1b429c3b95fa94f794f697a30f4c482d ] + @@ -21 +22,0 @@ -Cc: stable@dpdk.org @@ -31 +32 @@ -index 95d3c93c42..3d9f7c6ec7 100644 +index 693b256ffb..eb075c8331 100644 @@ -34 +35 @@ -@@ -5602,7 +5602,15 @@ hns3_is_reset_pending(struct hns3_adapter *hns) +@@ -5458,7 +5458,15 @@ hns3_is_reset_pending(struct hns3_adapter *hns) @@ -49,2 +50,2 @@ - if (reset != HNS3_NONE_RESET && hw->reset.level != HNS3_NONE_RESET && - hw->reset.level < reset) { + if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) { + hns3_warn(hw, "High level reset %d is pending", reset); @@ -52 +53 @@ -index 86f2ba24cc..a72535eb7d 100644 +index c1cf7a8c60..be6e37d4b4 100644 @@ -55 +56 @@ -@@ -1864,8 +1864,15 @@ hns3vf_is_reset_pending(struct hns3_adapter *hns) +@@ -2316,8 +2316,15 @@ hns3vf_is_reset_pending(struct hns3_adapter *hns) @@ -71,2 +72,2 @@ - if (hw->reset.level != HNS3_NONE_RESET && reset != HNS3_NONE_RESET && - hw->reset.level < reset) { + if (hw->reset.level != HNS3_NONE_RESET && hw->reset.level < reset) { + hns3_warn(hw, "High level reset %d is pending", reset);