All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Singh, Aman Deep" <aman.deep.singh@intel.com>
To: "Min Hu (Connor)" <humin29@huawei.com>, <dev@dpdk.org>
Cc: <ferruh.yigit@intel.com>, <thomas@monjalon.net>, <xiaoyun.li@intel.com>
Subject: Re: [dpdk-dev] [PATCH 1/3] app/testpmd: fix port status of active slave device
Date: Mon, 15 Nov 2021 18:31:41 +0530	[thread overview]
Message-ID: <ebec29e0-c643-dbe3-7fd4-4e465569b040@intel.com> (raw)
In-Reply-To: <20211025063922.34066-2-humin29@huawei.com>

On 10/25/2021 12:09 PM, Min Hu (Connor) wrote:
> From: Huisong Li <lihuisong@huawei.com>
>
> Stopping a bond device also stops all active slaves under the bond device.
> If this port is bond device, we need to modify the port status of all
> slaves from RTE_PORT_STARTED to RTE_PORT_STOPPED.
>
> Fixes: 0e545d3047fe ("app/testpmd: check stopping port is not in bonding")
> Cc: stable@dpdk.org
>
> Signed-off-by: Huisong Li <lihuisong@huawei.com>
> Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
> ---

Hi Huisong,

Just wanted to check, if this behaviour can be taken care-off in bonding 
PMD itself.
Or each application will need to in-corporate this change.

Thanks

>   app/test-pmd/cmdline.c |  1 +
>   app/test-pmd/testpmd.c | 49 +++++++++++++++++++++++++++++++++++++++---
>   app/test-pmd/testpmd.h |  3 ++-
>   3 files changed, 49 insertions(+), 4 deletions(-)
>
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 722f4fb9d9..5bfb4b509b 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -6639,6 +6639,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 af0e79fe6d..d6b9ebc4dd 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -65,6 +65,9 @@
>   #ifdef RTE_EXEC_ENV_WINDOWS
>   #include <process.h>
>   #endif
> +#ifdef RTE_NET_BOND
> +#include <rte_eth_bond.h>
> +#endif
>   
>   #include "testpmd.h"
>   
> @@ -2986,6 +2989,35 @@ start_port(portid_t pid)
>   	return 0;
>   }
>   
> +#ifdef RTE_NET_BOND
> +static void
> +change_bonding_active_slave_port_status(portid_t bond_pid)
> +{
> +	portid_t slave_pids[RTE_MAX_ETHPORTS];
> +	struct rte_port *port;
> +	int num_active_slaves;
> +	portid_t slave_pid;
> +	int i;
> +
> +	num_active_slaves = rte_eth_bond_active_slaves_get(bond_pid, slave_pids,
> +							   RTE_MAX_ETHPORTS);
> +	if (num_active_slaves < 0) {
> +		fprintf(stderr, "Failed to get slave list for port = %u\n",
> +			bond_pid);
> +		return;
> +	}
> +
> +	for (i = 0; i < num_active_slaves; i++) {
> +		slave_pid = slave_pids[i];
> +		port = &ports[slave_pid];
> +		if (rte_atomic16_cmpset(&(port->port_status),
> +			RTE_PORT_STARTED, RTE_PORT_STOPPED) == 0)
> +			fprintf(stderr, "Port %u can not be set into stopped\n",
> +				slave_pid);
> +	}
> +}
> +#endif
> +
>   void
>   stop_port(portid_t pid)
>   {
> @@ -3042,9 +3074,20 @@ stop_port(portid_t pid)
>   		if (port->flow_list)
>   			port_flow_flush(pi);
>   
> -		if (eth_dev_stop_mp(pi) != 0)
> -			RTE_LOG(ERR, EAL, "rte_eth_dev_stop failed for port %u\n",
> -				pi);
> +		if (is_proc_primary()) {
> +#ifdef RTE_NET_BOND
> +			/*
> +			 * Stopping a bond device also stops all active slaves
> +			 * under the bond device. If this port is bond device,
> +			 * we need to modify the port status of all slaves.
> +			 */
> +			if (port->bond_flag == 1)
> +				change_bonding_active_slave_port_status(pi);
> +#endif
> +			if (rte_eth_dev_stop(pi) != 0)
> +				RTE_LOG(ERR, EAL, "rte_eth_dev_stop failed for port %u\n",
> +					pi);
> +		}
>   
>   		if (rte_atomic16_cmpset(&(port->port_status),
>   			RTE_PORT_HANDLING, RTE_PORT_STOPPED) == 0)
> diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
> index e3995d24ab..ad3b4f875c 100644
> --- a/app/test-pmd/testpmd.h
> +++ b/app/test-pmd/testpmd.h
> @@ -237,7 +237,8 @@ struct rte_port {
>   	struct rte_eth_txconf   tx_conf[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue tx configuration */
>   	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;
>   	/**< Associated indirect actions. */

  reply	other threads:[~2021-11-15 13:02 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-25  6:39 [dpdk-dev] [PATCH 0/3] bugfix for testpmd Min Hu (Connor)
2021-10-25  6:39 ` [dpdk-dev] [PATCH 1/3] app/testpmd: fix port status of active slave device Min Hu (Connor)
2021-11-15 13:01   ` Singh, Aman Deep [this message]
2021-11-16  1:20     ` lihuisong (C)
2022-02-03  7:06       ` Singh, Aman Deep
2022-02-04 12:07   ` Ferruh Yigit
2022-02-08  1:19     ` lihuisong (C)
2021-10-25  6:39 ` [dpdk-dev] [PATCH 2/3] app/testpmd: fix slave device isn't released Min Hu (Connor)
2022-02-04 12:14   ` Ferruh Yigit
2022-02-08  1:12     ` lihuisong (C)
2021-10-25  6:39 ` [dpdk-dev] [PATCH 3/3] app/testpmd: remove unused header file Min Hu (Connor)
2021-11-08 16:05   ` Ferruh Yigit
2022-03-24  3:00 ` [PATCH V2 0/4] bugfix for bonding Min Hu (Connor)
2022-03-24  3:00   ` [PATCH V2 1/4] net/bonding: fix non-active slaves aren't stopped Min Hu (Connor)
2022-04-26 18:19     ` Ferruh Yigit
2022-04-29  6:45       ` Min Hu (Connor)
2022-04-29 13:31         ` Ferruh Yigit
2022-05-03  6:54           ` Min Hu (Connor)
2022-05-03 19:04             ` Ferruh Yigit
2022-05-05  1:16               ` Min Hu (Connor)
2022-03-24  3:00   ` [PATCH V2 2/4] net/bonding: fix non-terminable while loop Min Hu (Connor)
2022-04-26 18:19     ` Ferruh Yigit
2022-04-29  6:52       ` Min Hu (Connor)
2022-04-29 13:35         ` Ferruh Yigit
2022-03-24  3:00   ` [PATCH V2 3/4] app/testpmd: fix port status of slave device Min Hu (Connor)
2022-03-24  3:00   ` [PATCH V2 4/4] app/testpmd: fix slave device isn't released Min Hu (Connor)
2022-05-30  6:01     ` Min Hu (Connor)
2022-05-30 10:21       ` Singh, Aman Deep
2022-04-25  6:49   ` [PATCH V2 0/4] bugfix for bonding Min Hu (Connor)
2022-05-03 10:02   ` [PATCH v3 0/5] " Min Hu (Connor)
2022-05-03 10:02     ` [PATCH v3 1/5] net/bonding: fix non-active slaves aren't stopped Min Hu (Connor)
2022-05-03 10:02     ` [PATCH v3 2/5] net/bonding: fix non-terminable while loop Min Hu (Connor)
2022-05-03 10:02     ` [PATCH v3 3/5] app/testpmd: fix port status of slave device Min Hu (Connor)
2022-05-03 23:39       ` Konstantin Ananyev
2022-05-06  8:16         ` Min Hu (Connor)
2022-05-08 11:28           ` Konstantin Ananyev
2022-05-10 16:34           ` Ferruh Yigit
2022-05-10 21:48             ` Konstantin Ananyev
2022-05-11  2:16               ` Min Hu (Connor)
2022-05-11 10:05                 ` Ferruh Yigit
2022-05-11  2:14       ` [PATCH v4] " Min Hu (Connor)
2022-05-11 22:08         ` Konstantin Ananyev
2022-05-19  7:15           ` Andrew Rybchenko
2022-05-03 10:02     ` [PATCH v3 4/5] app/testpmd: fix slave device isn't released Min Hu (Connor)
2022-06-01 17:54       ` Ferruh Yigit
2022-06-07  8:15         ` Dongdong Liu
2022-06-07  8:10       ` [PATCH v4] " Dongdong Liu
2022-06-07 14:31         ` Ferruh Yigit
2022-06-09  7:50           ` Dongdong Liu
2022-06-09  8:50             ` Ferruh Yigit
2022-06-09 11:20               ` Dongdong Liu
2022-06-09 11:49       ` [PATCH v5] " Dongdong Liu
2022-06-10  8:10         ` Ferruh Yigit
2022-05-03 10:02     ` [PATCH v3 5/5] ethdev: fix dev state when stop Min Hu (Connor)
2022-05-25 17:44       ` Ferruh Yigit
2022-05-26 10:21         ` Thomas Monjalon
2022-05-30 12:04           ` Ferruh Yigit
2022-05-11 14:04     ` [PATCH v3 0/5] bugfix for bonding Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ebec29e0-c643-dbe3-7fd4-4e465569b040@intel.com \
    --to=aman.deep.singh@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=humin29@huawei.com \
    --cc=thomas@monjalon.net \
    --cc=xiaoyun.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.