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 465FEA0093; Tue, 10 May 2022 18:34:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 37E9B4113D; Tue, 10 May 2022 18:34:21 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2065.outbound.protection.outlook.com [40.107.223.65]) by mails.dpdk.org (Postfix) with ESMTP id A6B24406B4; Tue, 10 May 2022 18:34:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PJX6VnbbvKjGUpuk0aQwPP7Cnib5iNNgIzqo7WuD4oHFJGk4cqWzLqdBVoNt+zopFidburfcrZP3t+1SD7hczFpkZ9Ch7WmG7G+fPj4GtAsvFN25G1j5dWC45mhISUUXZ41V/n1mFjFGWNnLHf+ZDavpVXC4wYlWgkuqJWx9+uQUfI7BGGqp3nnFshBVgkSBzfMsSl5fN2jXRUmmX/HLV4tGZ9xFi5RMO4n0DbIsY3PzFHrZqis5TAjLHJe38DIACx8sLqXrEfi/pfshqklSvASgjlHIYsZY8fOMcs9Fx1gr9fUat9QFBaagdZ8tWQfP2K9Q0+Boye74uLtTKqZf9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sSjlbKztuZH/+T/CZ6Ihtfa+drC/WrRqQopt27Ir7pg=; b=oMIAMQAsg1oKOtMRXmhiL3uoLv87aMFPhdDtYG2wC1dYkVn7t6u9mYoLA1xpyCN9sVvH5m37JNOTrCLpw9yDcu0pDHoHlO2RjUUbJmoY7b7TMvN2pPOniCPlaAg1XfU12peoyLy6bv2W7mCoD8DnocheAYaYKrUaQ4YHoAMjWnVoQeQeBhMcUwkXaNtnptsgyjO8ahnettHFwiJTCbe0UU9aYyRur28wvwqkmql294/g1i99lGPjRJ7wS/iP0PX5juG5q1MksUPIe/AnoSWj7oAjl4V0OUfYaFDX6utyJoh2LTmox6rdkT1HC5HnmvXCsnzxQ1xQVh/27tPdT1b3/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.80.198) smtp.rcpttodomain=huawei.com smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sSjlbKztuZH/+T/CZ6Ihtfa+drC/WrRqQopt27Ir7pg=; b=FuyJHoSATw9bYbpnI3nnbZmxuENH3C0s3dP3MxgmiM5a7s3U4AR67v2cihyf9dUhUOuqVmD9EfJjb9dSGYatHSCOT6YHsc7DfD/AMFnF7tmII4P2nZPVrL7YQuB7d5W7aPmmg4En1jvXX7Jo0SKm1Rb2FJqfMSnRqzM2IyZnudY= Received: from DM6PR07CA0116.namprd07.prod.outlook.com (2603:10b6:5:330::13) by CH2PR02MB6776.namprd02.prod.outlook.com (2603:10b6:610:7d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.22; Tue, 10 May 2022 16:34:17 +0000 Received: from DM3NAM02FT026.eop-nam02.prod.protection.outlook.com (2603:10b6:5:330:cafe::62) by DM6PR07CA0116.outlook.office365.com (2603:10b6:5:330::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21 via Frontend Transport; Tue, 10 May 2022 16:34:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.80.198) smtp.mailfrom=xilinx.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.80.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.80.198; helo=xir-pvapexch01.xlnx.xilinx.com; Received: from xir-pvapexch01.xlnx.xilinx.com (149.199.80.198) by DM3NAM02FT026.mail.protection.outlook.com (10.13.5.129) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5227.15 via Frontend Transport; Tue, 10 May 2022 16:34:17 +0000 Received: from xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) by xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Tue, 10 May 2022 17:34:16 +0100 Received: from smtp.xilinx.com (172.21.105.197) by xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) with Microsoft SMTP Server id 15.1.2176.14 via Frontend Transport; Tue, 10 May 2022 17:34:16 +0100 Envelope-to: humin29@huawei.com, konstantin.v.ananyev@yandex.ru, dev@dpdk.org, lihuisong@huawei.com, stable@dpdk.org, aman.deep.singh@intel.com, xiaoyun.li@intel.com, yuying.zhang@intel.com, pablo.de.lara.guarch@intel.com, bernard.iremonger@intel.com Received: from [10.71.116.3] (port=59793) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1noSoR-0006PK-Ul; Tue, 10 May 2022 17:34:16 +0100 Message-ID: Date: Tue, 10 May 2022 17:34:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH v3 3/5] app/testpmd: fix port status of slave device Content-Language: en-US To: "Min Hu (Connor)" , Konstantin Ananyev , CC: Huisong Li , , Aman Singh , Xiaoyun Li , Yuying Zhang , Pablo de Lara , Bernard Iremonger References: <20220324030036.4761-1-humin29@huawei.com> <20220503100217.46203-1-humin29@huawei.com> <20220503100217.46203-4-humin29@huawei.com> <45233ff7-512c-f50a-7b56-8970737d3efe@yandex.ru> From: Ferruh Yigit In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c0d42e13-92c1-46d9-66d3-08da32a2ed54 X-MS-TrafficTypeDiagnostic: CH2PR02MB6776:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0uPpx6p4O1NKWXDEa0MARuGY+y6hVsXf2I8PL5xeeoKeZUme940sroXpc0eWTwH7QSraiNTJaZ0cO6akUW/Giu4DB8410xBT0EXCva9u7V6BKJhBItwJf2vPD3IWc0aV+zbKDUnWfmHTa7wUMazFdSCFRF1iB0BpaGOB42GpUsxSRwcqgztDPmD4enyJPMsrTBqKQQPbHCvc6Rfi+7rFK5pWgm/8am0opUvJy3KsgSRLWdxFZEBEvaaefQFSp6aPNorl+IsOS3ddigQDngnb9jGDfBo3wDxBMZ5wg1Z9LFbIddcnHFEoWxJq2/6G2fVLeXXmf/aHALhp0rA3RtReCkjFSCa1qodWhfIger5pBbeG8BzGnsq4xMjZsVQ3Ux/+MT6BHso9jJO4WKpSSYpS84Pv3MDdKHgTxepl9wmkLSdcmYTmw5snDw30ZyHYCOHQnrqt/40CVS+NozgaInb223qFLbTwVeCnNYTD9tTe79H/lt5JVrAyDEpa2hR9jPNjhA38xH4L4KfrVCT9u7Zz+hKdJyS4VS+SIHgL56CrlmUBNxSlsp1hsPw3WnfUMoghIawBbvMc8mvcAg/qB+ztwyHAqxQrCHfmshWG8hOI8Ht+6tE1GBzeIXkCd1NasbYxstIqaAt5fquTvCBnA5pmcJMCwrbysVap+i+oQABko33MnRklwW20cXX3mLkxFiOakNhIq2Z9JVk92wtWTua/swvP3uvJGKaXhm9GkiWgvTU= X-Forefront-Antispam-Report: CIP:149.199.80.198; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:xir-pvapexch01.xlnx.xilinx.com; PTR:unknown-80-198.xilinx.com; CAT:NONE; SFS:(13230001)(4636009)(40470700004)(36840700001)(46966006)(5660300002)(508600001)(31696002)(8936002)(7416002)(9786002)(2906002)(53546011)(44832011)(7636003)(356005)(83380400001)(26005)(2616005)(36860700001)(40460700003)(426003)(186003)(336012)(47076005)(54906003)(110136005)(316002)(70586007)(70206006)(31686004)(4326008)(82310400005)(8676002)(36756003)(50156003)(43740500002); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 May 2022 16:34:17.1981 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c0d42e13-92c1-46d9-66d3-08da32a2ed54 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.80.198]; Helo=[xir-pvapexch01.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: DM3NAM02FT026.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR02MB6776 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 5/6/2022 9:16 AM, Min Hu (Connor) wrote: > Hi, Konstantin, > > 在 2022/5/4 7:39, Konstantin Ananyev 写道: >> 03/05/2022 11:02, Min Hu (Connor) пишет: >>> From: Huisong Li >>> >>> Starting or stopping a bonded port also starts or stops all active >>> slaves >>> under the bonded port. If this port is a bonded device, we need to >>> modify >>> the port status of all slaves. >>> >>> Fixes: 0e545d3047fe ("app/testpmd: check stopping port is not in >>> bonding") >>> Cc: stable@dpdk.org >>> >>> Signed-off-by: Huisong Li >>> Signed-off-by: Min Hu (Connor) >>> Acked-by: Aman Singh >>> --- >>>   app/test-pmd/cmdline.c |  1 + >>>   app/test-pmd/testpmd.c | 74 +++++++++++++++++++++++++++++++++++++++--- >>>   app/test-pmd/testpmd.h |  3 +- >>>   3 files changed, 73 insertions(+), 5 deletions(-) >>> >>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c >>> index 6ffea8e21a..d9fc7a88bd 100644 >>> --- a/app/test-pmd/cmdline.c >>> +++ b/app/test-pmd/cmdline.c >>> @@ -6671,6 +6671,7 @@ static void >>> cmd_create_bonded_device_parsed(void *parsed_result, >>>                   "Failed to enable promiscuous mode for port %u: %s >>> - ignore\n", >>>                   port_id, rte_strerror(-ret)); >>> +        ports[port_id].bond_flag = 1; >>>           ports[port_id].need_setup = 0; >>>           ports[port_id].port_status = RTE_PORT_STOPPED; >>>       } >>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c >>> index fe2ce19f99..dc90600787 100644 >>> --- a/app/test-pmd/testpmd.c >>> +++ b/app/test-pmd/testpmd.c >>> @@ -66,6 +66,9 @@ >>>   #ifdef RTE_EXEC_ENV_WINDOWS >>>   #include >>>   #endif >>> +#ifdef RTE_NET_BOND >>> +#include >>> +#endif >>>   #include "testpmd.h" >>> @@ -597,11 +600,57 @@ eth_dev_configure_mp(uint16_t port_id, uint16_t >>> nb_rx_q, uint16_t nb_tx_q, >>>       return 0; >>>   } >>> +#ifdef RTE_NET_BOND >>> +static int >>> +change_bonding_slave_port_status(portid_t bond_pid, bool is_stop) >>> +{ >>> +    portid_t slave_pids[RTE_MAX_ETHPORTS]; >>> +    struct rte_port *port; >>> +    int num_slaves; >>> +    portid_t slave_pid; >>> +    int i; >>> + >>> +    num_slaves = rte_eth_bond_slaves_get(bond_pid, slave_pids, >>> +                        RTE_MAX_ETHPORTS); >>> +    if (num_slaves < 0) { >>> +        fprintf(stderr, "Failed to get slave list for port = %u\n", >>> +            bond_pid); >>> +        return num_slaves; >>> +    } >>> + >>> +    for (i = 0; i < num_slaves; i++) { >>> +        slave_pid = slave_pids[i]; >>> +        port = &ports[slave_pid]; >>> +        port->port_status = >>> +            is_stop ? RTE_PORT_STOPPED : RTE_PORT_STARTED; >>> +    } >>> + >>> +    return 0; >>> +} >>> +#endif >>> + >>>   static int >>>   eth_dev_start_mp(uint16_t port_id) >>>   { >>> -    if (is_proc_primary()) >>> -        return rte_eth_dev_start(port_id); >>> +    int ret; >>> + >>> +    if (is_proc_primary()) { >>> +        ret = rte_eth_dev_start(port_id); >>> +        if (ret != 0) >>> +            return ret; >>> + >>> +#ifdef RTE_NET_BOND >>> +        struct rte_port *port = &ports[port_id]; >>> + >>> +        /* >>> +         * Starting a bonded port also starts all slaves under the >>> bonded >>> +         * device. So if this port is bond device, we need to modify >>> the >>> +         * port status of these slaves. >>> +         */ >>> +        if (port->bond_flag == 1) >>> +            return change_bonding_slave_port_status(port_id, false); >>> +#endif >>> +    } >>>       return 0; >>>   } >>> @@ -609,8 +658,25 @@ eth_dev_start_mp(uint16_t port_id) >>>   static int >>>   eth_dev_stop_mp(uint16_t port_id) >>>   { >>> -    if (is_proc_primary()) >>> -        return rte_eth_dev_stop(port_id); >>> +    int ret; >>> + >>> +    if (is_proc_primary()) { >>> +        ret = rte_eth_dev_stop(port_id); >>> +        if (ret != 0) >>> +            return ret; >>> + >>> +#ifdef RTE_NET_BOND >> >> Here and in other places - probably no need to pollute the code >> with all these 'ifdef RTE_NET_BOND'. >> I suppose this logic (for checking is bonding API present or not) >> can be hidden inside change_bonding_slave_port_status() itself. >> > I think it does not pollute the code. anyone can tell according to > the flag 'ifdef RTE_NET_BOND'. > if hiddle inside 'change_bonding_slave_port_status', it will be weird. > For example, if the port is not bonding port, It will also invoke > 'change_bonding_slave_port_status'. That is unreasonable. > Hi Konstantin, I also was not happy to have bonding (or any PMD) ifdef in the generic (start()/stop()) functions, but the ifdef blocks updates testpmd (application) level status. So that can't be handled in the PMD and need to be in the application level. Which is enforcing to have same PMD specific code in the testpmd level, if you have any suggestion to prevent this, I am for it. I will proceed with first two patch of this set, which fixes bonding PMD issues, I will hold the testpmd ones for more comments. Thanks, ferruh > >> >>> +        struct rte_port *port = &ports[port_id]; >>> + >>> +        /* >>> +         * Stopping a bonded port also stops all slaves under the >>> bonded >>> +         * device. So if this port is bond device, we need to modify >>> the >>> +         * port status of these slaves. >>> +         */ >>> +        if (port->bond_flag == 1) >>> +            return change_bonding_slave_port_status(port_id, true); >>> +#endif >>> +    } >>>       return 0; >>>   } >>> diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h >>> index 31f766c965..67f253b30e 100644 >>> --- a/app/test-pmd/testpmd.h >>> +++ b/app/test-pmd/testpmd.h >>> @@ -266,7 +266,8 @@ struct rte_port { >>>       uint32_t                mc_addr_nb; /**< nb. of addr. in >>> mc_addr_pool */ >>>       queueid_t               queue_nb; /**< nb. of queues for flow >>> rules */ >>>       uint32_t                queue_sz; /**< size of a queue for flow >>> rules */ >>> -    uint8_t                 slave_flag; /**< bonding slave port */ >>> +    uint8_t                 slave_flag : 1, /**< bonding slave port */ >>> +                bond_flag : 1; /**< port is bond device */ >>>       struct port_template    *pattern_templ_list; /**< Pattern >>> templates. */ >>>       struct port_template    *actions_templ_list; /**< Actions >>> templates. */ >>>       struct port_table       *table_list; /**< Flow tables. */ >> >> .