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 53D86A0555 for ; Thu, 9 Jun 2022 13:37:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4F10D427EC; Thu, 9 Jun 2022 13:37:38 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 5006F427EC for ; Thu, 9 Jun 2022 13:37:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1654774656; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M0oWWnWphco6Akn8OFhv4LIIq0vwm45U7FfQtENTi1U=; b=Wyld5HhZrMAtYpdGOA/sFHyek/UsI1vjrO1vXZCEBAf0P2rGDYc+o4b2bu1MVi7eLxV1vl lDobC3227Cp+GsrXPxvEItO3OfywyKT5LC511WeAO5XljqekkbCq32ZqZClvYR9gMRL9lY F8Yh3ZyF1hgY0Ve8LR6g3bgjCp6qIH8= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-418-R3BSdoCqNiy8WMTbNTi6TA-1; Thu, 09 Jun 2022 07:37:35 -0400 X-MC-Unique: R3BSdoCqNiy8WMTbNTi6TA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5EB8985A584; Thu, 9 Jun 2022 11:37:35 +0000 (UTC) Received: from rh.redhat.com (unknown [10.39.195.82]) by smtp.corp.redhat.com (Postfix) with ESMTP id 405B21730C; Thu, 9 Jun 2022 11:37:34 +0000 (UTC) From: Kevin Traynor To: Huisong Li Cc: Min Hu , Aman Singh , Konstantin Ananyev , dpdk stable Subject: patch 'app/testpmd: fix port status of bonding slave device' has been queued to stable release 21.11.2 Date: Thu, 9 Jun 2022 12:36:05 +0100 Message-Id: <20220609113701.386938-18-ktraynor@redhat.com> In-Reply-To: <20220609113701.386938-1-ktraynor@redhat.com> References: <20220609113701.386938-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ktraynor@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true 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 21.11.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 06/13/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/0dd479b1a1df56292b58b4b8983c94aac5bfb5f7 Thanks. Kevin --- >From 0dd479b1a1df56292b58b4b8983c94aac5bfb5f7 Mon Sep 17 00:00:00 2001 From: Huisong Li Date: Wed, 11 May 2022 10:14:34 +0800 Subject: [PATCH] app/testpmd: fix port status of bonding slave device [ upstream commit e46372d7b082706718bb17981ae632e4e4d56414 ] 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") Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) Acked-by: Aman Singh Acked-by: Konstantin Ananyev --- app/test-pmd/cmdline.c | 1 + app/test-pmd/testpmd.c | 73 +++++++++++++++++++++++++++++++++++++++--- app/test-pmd/testpmd.h | 3 +- 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0b5bece513..2c531ff0af 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -6661,4 +6661,5 @@ static void cmd_create_bonded_device_parsed(void *parsed_result, 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 e4f9d5f147..dd1f286d59 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -67,4 +67,7 @@ #include #endif +#ifdef RTE_NET_BOND +#include +#endif #include "testpmd.h" @@ -598,9 +601,56 @@ eth_dev_configure_mp(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, } +static int +change_bonding_slave_port_status(portid_t bond_pid, bool is_stop) +{ +#ifdef RTE_NET_BOND + + 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; + } +#else + RTE_SET_USED(bond_pid); + RTE_SET_USED(is_stop); +#endif + return 0; +} + 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; + + 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); + } return 0; @@ -610,6 +660,21 @@ 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; + + 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); + } return 0; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 9967825044..bedc4e07fb 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -244,5 +244,6 @@ struct rte_port { struct rte_ether_addr *mc_addr_pool; /**< pool of multicast addrs */ uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */ - uint8_t slave_flag; /**< bonding slave port */ + uint8_t slave_flag : 1, /**< bonding slave port */ + bond_flag : 1; /**< port is bond device */ struct port_flow *flow_list; /**< Associated flows. */ struct port_indirect_action *actions_list; -- 2.34.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-06-09 12:34:30.197919359 +0100 +++ 0018-app-testpmd-fix-port-status-of-bonding-slave-device.patch 2022-06-09 12:34:29.666980506 +0100 @@ -1 +1 @@ -From e46372d7b082706718bb17981ae632e4e4d56414 Mon Sep 17 00:00:00 2001 +From 0dd479b1a1df56292b58b4b8983c94aac5bfb5f7 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit e46372d7b082706718bb17981ae632e4e4d56414 ] + @@ -11 +12,0 @@ -Cc: stable@dpdk.org @@ -24 +25 @@ -index 91e4090582..44ddf9bbc8 100644 +index 0b5bece513..2c531ff0af 100644 @@ -27 +28 @@ -@@ -6668,4 +6668,5 @@ static void cmd_create_bonded_device_parsed(void *parsed_result, +@@ -6661,4 +6661,5 @@ static void cmd_create_bonded_device_parsed(void *parsed_result, @@ -34 +35 @@ -index 79bb23264b..777763f749 100644 +index e4f9d5f147..dd1f286d59 100644 @@ -129 +130 @@ -index 31f766c965..67f253b30e 100644 +index 9967825044..bedc4e07fb 100644 @@ -132,3 +133,3 @@ -@@ -267,5 +267,6 @@ struct rte_port { - queueid_t queue_nb; /**< nb. of queues for flow rules */ - uint32_t queue_sz; /**< size of a queue for flow rules */ +@@ -244,5 +244,6 @@ struct rte_port { + struct rte_ether_addr *mc_addr_pool; /**< pool of multicast addrs */ + uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */ @@ -138,2 +139,2 @@ - struct port_template *pattern_templ_list; /**< Pattern templates. */ - struct port_template *actions_templ_list; /**< Actions templates. */ + struct port_flow *flow_list; /**< Associated flows. */ + struct port_indirect_action *actions_list;