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 4AA64A0351 for ; Mon, 10 Jan 2022 08:46:36 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3D7634013F; Mon, 10 Jan 2022 08:46:36 +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 8620C4013F for ; Mon, 10 Jan 2022 08:46:35 +0100 (CET) Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) (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 61597406EC for ; Mon, 10 Jan 2022 07:46:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1641800795; bh=Gj1IVXkZ5H5yl/yAy8cfmVH+2ZC9yFIFr08ubYumXZ8=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=BUPTIW+WaKY20FoVt8YIbm3l71brdjEyLfB5JX7oEmZ4D9ib/fJnjFLFzOBTM7SM4 nCIHKOkv2Q0sKlO+h0mGfeSooOaO2DVuVLkp/t4NRqOez32fEsIQ9CAnEfQXqDTYLi QSgO5l21tO76mcyCSaUIcQ94QiQyrRhy5Qc1jkDqOTEXN7pKAwOcA5qtdlHe/XOf8k DWJ67ubYScybqDsM63//k2ZXxv7KxeplcKan3wrF56g+m+GFTJFzfqgaUrFUCAQcab U0hWQNV3x+sRtczzNxnr4kqA7IPFGAI9YJwvNsYe9fm5HPELYyqpvXrDabC6hzBbT4 Q1ICzi69DVAKw== Received: by mail-qk1-f198.google.com with SMTP id i6-20020a05620a144600b00477708052b6so6987989qkl.10 for ; Sun, 09 Jan 2022 23:46:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Gj1IVXkZ5H5yl/yAy8cfmVH+2ZC9yFIFr08ubYumXZ8=; b=LNB/XpJ2gq71lxfXnpbYQ5gM8P1UO728bB343LvtVJ6aMrFSupxxvPFdNfr74EC71s rkU37t2fIKUUE+AJFBin9QwKGVxe/EvNcFTthsnH/9n7hccfqeCfwJOerUjkwXksaHFt /MP2sTucPKn4IuEupklGyqfGDQJMwvxpEMCDO2Mm9UxazAiNi++/TfJvlT/bR33ItVld i/ILjz9+viJRL5VzHzkGi+9c09MBZHj7ZN0tgqBALy46Es60mHfb4f8zNT2Vh0tERqYH kG8XyYyO+2VBVrI+u1UdfiGaPTvU5CU1qIztMRhUValdXPHtJ6RwB0+kxh9aDH3JarAK y5+g== X-Gm-Message-State: AOAM531ciZik8sCeeG03iC707y1YyTHJbYUx2mGmg8GbdqnX2+CYaErG EX1U2MqIZFFkOloHrOcsA6Uo60pWMRbfQRJqCtOcqY247kVzq+sLHPZWz9fiN4RGU4Byno14r+h /Csn1SrrTKcgcKEq0+op9JYtmNEvXpObPRBzTpcUi X-Received: by 2002:a05:620a:f0b:: with SMTP id v11mr50303155qkl.243.1641800794329; Sun, 09 Jan 2022 23:46:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJyvn34gMBxu5OxLzH1SPMZULU6mp2OtEF19Y51k1VgR/UuAhPpiSLAb/ll2ocOVWPSAq2Ixw9zuk38aeRChN5I= X-Received: by 2002:a05:620a:f0b:: with SMTP id v11mr50303148qkl.243.1641800794056; Sun, 09 Jan 2022 23:46:34 -0800 (PST) MIME-Version: 1.0 References: <20211225105344.28355-1-lihuisong@huawei.com> <20211225105344.28355-4-lihuisong@huawei.com> In-Reply-To: <20211225105344.28355-4-lihuisong@huawei.com> From: Christian Ehrhardt Date: Mon, 10 Jan 2022 08:46:08 +0100 Message-ID: Subject: Re: [PATCH 19.11 3/4] net/hns3: fix multi-process action register and unregister To: Huisong Li Cc: stable@dpdk.org, humin29@huawei.com Content-Type: text/plain; charset="UTF-8" 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 On Sat, Dec 25, 2021 at 11:58 AM Huisong Li wrote: > > [ upstream commit 841f8693536f9410fd51d385e1090d35cfe59914 ] > Thank you, queued for 19.11.12 (later this year) > 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.33.0 > -- Christian Ehrhardt Staff Engineer, Ubuntu Server Canonical Ltd