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 AB175A034C for ; Fri, 25 Feb 2022 18:16:02 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A0671410FD; Fri, 25 Feb 2022 18:16:02 +0100 (CET) Received: from smtp-relay-internal-0.canonical.com (smtp-relay-internal-0.canonical.com [185.125.188.122]) by mails.dpdk.org (Postfix) with ESMTP id DAC5841148 for ; Fri, 25 Feb 2022 18:16:00 +0100 (CET) Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id A34463FCAB for ; Fri, 25 Feb 2022 17:16:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1645809360; bh=k0DZcBK91WkZdm2570fIDsd/PHWEbZC0MKO2URfGzwU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cEL5w0UOJRXDgw6Ukpy77s2eTYJ4D4UU5nZfFJVDuFcWPMyGrEkgV4RYSwi6POjRN 3bgPBJ9hGwFAaxulB8cwxd2mI0jYlA6YnNcklnneMHQNyOGq44GJKZBN1Flbb5TRxR g5mqyY9OENsUUMbtfLqfx5yjJe8vpCVuXbBV1RITv4YwaFjK2nnVGEbb9WJPjUgkJr HrUOFi5JeNycsLXPLD92e6Q3vTyTIpeoonqOxZRhf094RQiu+mBwIs69eOsck6Azup MNa+1DsmV+uXxSyJyV54LiL4Y4oWb6GPDXQy9JqMFceLUWEJ6HlIAbOB3ZlLPvqjMd FpB1o82SfkFxw== Received: by mail-wm1-f70.google.com with SMTP id l31-20020a05600c1d1f00b00380e3425ba7so1588539wms.9 for ; Fri, 25 Feb 2022 09:16:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=k0DZcBK91WkZdm2570fIDsd/PHWEbZC0MKO2URfGzwU=; b=dxSP5XM3e91FgVMwuwtNQGQlQgyOkB5qnOjrvyIdcgGequIDQzAKI23HuP4jayJvlL guiKtJnVocX2L5RX1S2A4O+pZklYq24WNiWYNuAt057obrsuWEbPWEX2wgK+MD0P8fmR dOXzQZnmA80123sfqWGVoF+oMMCuYKYhDjVYiubblVSjP+9wFFSsJQlXmp23tOFHP3XB qIbYh0uTlu5UyIiD/Km2TgW6gI0xysK0/YfmKjGpzGmvuh0JeyLQpksH4YGiloP2XuNc aGe5HWdxUaY/1+NguFxQOQj/rL+eCQMgKoNYsi8KZsUn6ap/GKN632AtYfVF/5+lJ1Xg CygQ== X-Gm-Message-State: AOAM531ieO1SByl480BMdmxitI8zHVjR/H9OojSh1ZD4H0uy8Ohb1rDy gOP8xohkdco8oooTaIVw8y1JgL3oUHGRVxauEHEQ6sZOucu4lXmX+ybUovmuUCqe3TEp5GGuDGx 2YkJ373x2l/zLY2TDyhQI/wrJ X-Received: by 2002:a1c:a7ce:0:b0:380:eb26:f41a with SMTP id q197-20020a1ca7ce000000b00380eb26f41amr3566716wme.105.1645809360056; Fri, 25 Feb 2022 09:16:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJyZtAzkQLRjFwGC7hxo1p+xAPsgvwVUx9D0NltfPQUXxdn7Li6PqThMZziLdDX1tReNZM0yww== X-Received: by 2002:a1c:a7ce:0:b0:380:eb26:f41a with SMTP id q197-20020a1ca7ce000000b00380eb26f41amr3566699wme.105.1645809359836; Fri, 25 Feb 2022 09:15:59 -0800 (PST) Received: from Keschdeichel.fritz.box (068-133-067-156.ip-addr.inexio.net. [156.67.133.68]) by smtp.gmail.com with ESMTPSA id n8-20020a5d6608000000b001e73a0f21ffsm2706698wru.6.2022.02.25.09.15.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Feb 2022 09:15:59 -0800 (PST) From: christian.ehrhardt@canonical.com To: Huisong Li Cc: Min Hu , dpdk stable Subject: patch 'net/hns3: fix multi-process action register and unregister' has been queued to stable release 19.11.12 Date: Fri, 25 Feb 2022 18:14:56 +0100 Message-Id: <20220225171550.3499040-3-christian.ehrhardt@canonical.com> X-Mailer: git-send-email 2.35.0 In-Reply-To: <20220225171550.3499040-1-christian.ehrhardt@canonical.com> References: <20220225171550.3499040-1-christian.ehrhardt@canonical.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 19.11.12 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/27/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/cpaelzer/dpdk-stable-queue This queued commit can be viewed at: https://github.com/cpaelzer/dpdk-stable-queue/commit/21f145ed527e007d18cc825f59ad773f43545bfb Thanks. Christian Ehrhardt --- >From 21f145ed527e007d18cc825f59ad773f43545bfb Mon Sep 17 00:00:00 2001 From: Huisong Li Date: Sat, 25 Dec 2021 18:53:43 +0800 Subject: [PATCH] net/hns3: fix multi-process action register and unregister [ upstream commit 841f8693536f9410fd51d385e1090d35cfe59914 ] The multi-process has the following problems: 1) After a port in primary process is closed, the mp action of the process is unregistered. Which will cause that other device in the primary process cannot respond to requests from secondary processes. 2) Because variable "hns3_inited" is set to true without returning an initial value, the mp action cannot be registered again after it is unregistered. 3) The mp action of primary and secondary process need to be registered only once regardless of port numbers in the process. That's what variable "hns3_inited" does. But the variable is difficult to understand. This patch adds a hns3_process_local_data structure to resolve above problems. Fixes: 9570b1fdbdad ("net/hns3: check multi-process action register result") Fixes: 23d4b61fee5d ("net/hns3: support multiple process") Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) --- drivers/net/hns3/hns3_ethdev.c | 2 ++ drivers/net/hns3/hns3_ethdev_vf.c | 2 ++ drivers/net/hns3/hns3_mp.c | 37 ++++++++++++++++++------------- drivers/net/hns3/hns3_mp.h | 7 ++++++ 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c index d245c5db8b..122a2bc66c 100644 --- a/drivers/net/hns3/hns3_ethdev.c +++ b/drivers/net/hns3/hns3_ethdev.c @@ -5439,6 +5439,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) goto err_mp_init_secondary; } __atomic_fetch_add(&hw->secondary_cnt, 1, __ATOMIC_RELAXED); + process_data.eth_dev_cnt++; return 0; } @@ -5449,6 +5450,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) ret); goto err_mp_init_primary; } + process_data.eth_dev_cnt++; hw->adapter_state = HNS3_NIC_UNINITIALIZED; diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c index 972a6f00e4..562f6f7662 100644 --- a/drivers/net/hns3/hns3_ethdev_vf.c +++ b/drivers/net/hns3/hns3_ethdev_vf.c @@ -2294,6 +2294,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) goto err_mp_init_secondary; } __atomic_fetch_add(&hw->secondary_cnt, 1, __ATOMIC_RELAXED); + process_data.eth_dev_cnt++; return 0; } @@ -2304,6 +2305,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) ret); goto err_mp_init_primary; } + process_data.eth_dev_cnt++; hw->adapter_state = HNS3_NIC_UNINITIALIZED; hns->is_vf = true; diff --git a/drivers/net/hns3/hns3_mp.c b/drivers/net/hns3/hns3_mp.c index 9b5ff475a9..c7e49a798a 100644 --- a/drivers/net/hns3/hns3_mp.c +++ b/drivers/net/hns3/hns3_mp.c @@ -14,7 +14,8 @@ #include "hns3_rxtx.h" #include "hns3_mp.h" -static bool hns3_inited; +/* local data for primary or secondary process. */ +struct hns3_process_local_data process_data; /* * Initialize IPC message. @@ -199,14 +200,15 @@ int hns3_mp_init_primary(void) { int ret; - if (!hns3_inited) { - /* primary is allowed to not support IPC */ - ret = rte_mp_action_register(HNS3_MP_NAME, mp_primary_handle); - if (ret && rte_errno != ENOTSUP) - return ret; + if (process_data.init_done) + return 0; - hns3_inited = true; - } + /* primary is allowed to not support IPC */ + ret = rte_mp_action_register(HNS3_MP_NAME, mp_primary_handle); + if (ret && rte_errno != ENOTSUP) + return ret; + + process_data.init_done = true; return 0; } @@ -216,8 +218,12 @@ int hns3_mp_init_primary(void) */ void hns3_mp_uninit_primary(void) { - if (hns3_inited) + process_data.eth_dev_cnt--; + + if (process_data.eth_dev_cnt == 0) { rte_mp_action_unregister(HNS3_MP_NAME); + process_data.init_done = false; + } } /* @@ -227,13 +233,14 @@ int hns3_mp_init_secondary(void) { int ret; - if (!hns3_inited) { - ret = rte_mp_action_register(HNS3_MP_NAME, mp_secondary_handle); - if (ret) - return ret; + if (process_data.init_done) + return 0; - hns3_inited = true; - } + ret = rte_mp_action_register(HNS3_MP_NAME, mp_secondary_handle); + if (ret) + return ret; + + process_data.init_done = true; return 0; } diff --git a/drivers/net/hns3/hns3_mp.h b/drivers/net/hns3/hns3_mp.h index 60ef2315db..8ef432e763 100644 --- a/drivers/net/hns3/hns3_mp.h +++ b/drivers/net/hns3/hns3_mp.h @@ -5,6 +5,13 @@ #ifndef _HNS3_MP_H_ #define _HNS3_MP_H_ +/* Local data for primary or secondary process. */ +struct hns3_process_local_data { + bool init_done; /* Process action register completed flag. */ + int eth_dev_cnt; /* Ethdev count under the current process. */ +}; +extern struct hns3_process_local_data process_data; + void hns3_mp_req_start_rxtx(struct rte_eth_dev *dev); void hns3_mp_req_stop_rxtx(struct rte_eth_dev *dev); int hns3_mp_init_primary(void); -- 2.35.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-02-25 16:58:44.423699640 +0100 +++ 0003-net-hns3-fix-multi-process-action-register-and-unreg.patch 2022-02-25 16:58:44.184990363 +0100 @@ -1 +1 @@ -From 841f8693536f9410fd51d385e1090d35cfe59914 Mon Sep 17 00:00:00 2001 +From 21f145ed527e007d18cc825f59ad773f43545bfb Mon Sep 17 00:00:00 2001 @@ -3 +3 @@ -Date: Tue, 2 Nov 2021 09:38:27 +0800 +Date: Sat, 25 Dec 2021 18:53:43 +0800 @@ -5,0 +6,2 @@ +[ upstream commit 841f8693536f9410fd51d385e1090d35cfe59914 ] + @@ -34 +36 @@ -index dafaf31f65..874854da61 100644 +index d245c5db8b..122a2bc66c 100644 @@ -37 +39 @@ -@@ -7380,6 +7380,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) +@@ -5439,6 +5439,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) @@ -42 +43,0 @@ - hns3_tx_push_init(eth_dev); @@ -45 +46,2 @@ -@@ -7391,6 +7392,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) + +@@ -5449,6 +5450,7 @@ hns3_dev_init(struct rte_eth_dev *eth_dev) @@ -52 +54 @@ - hns->is_vf = false; + @@ -54 +56 @@ -index 41d61a8160..91acd1f5dd 100644 +index 972a6f00e4..562f6f7662 100644 @@ -57 +59 @@ -@@ -2688,6 +2688,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) +@@ -2294,6 +2294,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) @@ -62 +63,0 @@ - hns3_tx_push_init(eth_dev); @@ -65 +66,2 @@ -@@ -2699,6 +2700,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) + +@@ -2304,6 +2305,7 @@ hns3vf_dev_init(struct rte_eth_dev *eth_dev) @@ -74 +76 @@ -index c28598a53a..1a79d249b8 100644 +index 9b5ff475a9..c7e49a798a 100644 @@ -77 +79 @@ -@@ -12,7 +12,8 @@ +@@ -14,7 +14,8 @@ @@ -87 +89 @@ -@@ -230,14 +231,15 @@ int hns3_mp_init_primary(void) +@@ -199,14 +200,15 @@ int hns3_mp_init_primary(void) @@ -110 +112 @@ -@@ -247,8 +249,12 @@ int hns3_mp_init_primary(void) +@@ -216,8 +218,12 @@ int hns3_mp_init_primary(void) @@ -124 +126 @@ -@@ -258,13 +264,14 @@ int hns3_mp_init_secondary(void) +@@ -227,13 +233,14 @@ int hns3_mp_init_secondary(void) @@ -146 +148 @@ -index e0e4aeaf6c..b49532f985 100644 +index 60ef2315db..8ef432e763 100644 @@ -162 +164 @@ - void hns3_mp_req_start_tx(struct rte_eth_dev *dev); + int hns3_mp_init_primary(void);