All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@xilinx.com>
To: "Min Hu (Connor)" <humin29@huawei.com>, <dev@dpdk.org>
Cc: Huisong Li <lihuisong@huawei.com>, <stable@dpdk.org>,
	Chas Williams <chas3@att.com>,
	Radu Nicolau <radu.nicolau@intel.com>,
	Andrew Rybchenko <arybchenko@solarflare.com>,
	Thomas Monjalon <thomas@monjalon.net>
Subject: Re: [PATCH V2 1/4] net/bonding: fix non-active slaves aren't stopped
Date: Tue, 3 May 2022 20:04:33 +0100	[thread overview]
Message-ID: <0b879860-1465-4bd2-a15a-530306202586@xilinx.com> (raw)
In-Reply-To: <447752cb-d01b-df08-b5b9-0d331a20bf26@huawei.com>

On 5/3/2022 7:54 AM, Min Hu (Connor) wrote:
> Hi, Ferruh,
> 
> 在 2022/4/29 21:31, Ferruh Yigit 写道:
>> On 4/29/2022 7:45 AM, Min Hu (Connor) wrote:
>>> Hi, Ferruh,
>>>
>>> 在 2022/4/27 2:19, Ferruh Yigit 写道:
>>>> On 3/24/2022 3:00 AM, Min Hu (Connor) wrote:
>>>>> From: Huisong Li <lihuisong@huawei.com>
>>>>>
>>>>> When stopping a bonded port, all slaves should be deactivated. But 
>>>>> only
>>>>
>>>> s/deactivated/stopped/ ?
>>> not agreed. deactivated and stopped are different state for slave.
>>>
>>
>> Just to clarify the sentences, otherwise I see the 'stopped' and 
>> 'deactivated' states are different.
>> Next sentences complains that not all ports are stopped: "But only 
>> active slaves are stopped.", so I thought intention in this sentences 
>> to claim that all slaves should be stopped (but it mentions all slaves 
>> should be 'deactivated').
>> As long as you address the disconnection between two sentences, I 
>> don't mind the wording.
> Actually, there is something wrong with the wording.
> Yes, I should take your advice.
> 
>>
>>>>
>>>>> active slaves are stopped. So fix it and do "deactivae_slave()" for 
>>>>> active
>>>>
>>>> s/deactivae_slave()/deactivate_slave()/
>>>>
>>> agreed.
>>>
>>>>> slaves.
>>>>
>>>> Hi Connor,
>>>>
>>>> When a bonding port is closed, is it clear if all slave ports or 
>>>> active slave ports should be stopped?
>>> Yes, I think all the slave ports should be stopped(or try to be 
>>> stopped).
>>>>
>>>>>
>>>>> Fixes: 0911d4ec0183 ("net/bonding: fix crash when stopping mode 4 
>>>>> port")
>>>>> Cc: stable@dpdk.org
>>>>>
>>>>> Signed-off-by: Huisong Li <lihuisong@huawei.com>
>>>>> Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
>>>>> ---
>>>>>   drivers/net/bonding/rte_eth_bond_pmd.c | 20 +++++++++++---------
>>>>>   1 file changed, 11 insertions(+), 9 deletions(-)
>>>>>
>>>>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c 
>>>>> b/drivers/net/bonding/rte_eth_bond_pmd.c
>>>>> index b305b6a35b..469dc71170 100644
>>>>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
>>>>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
>>>>> @@ -2118,18 +2118,20 @@ bond_ethdev_stop(struct rte_eth_dev *eth_dev)
>>>>>       internals->link_status_polling_enabled = 0;
>>>>>       for (i = 0; i < internals->slave_count; i++) {
>>>>>           uint16_t slave_id = internals->slaves[i].port_id;
>>>>> +
>>>>> +        internals->slaves[i].last_link_status = 0;
>>>>> +        ret = rte_eth_dev_stop(slave_id);
>>>>> +        if (ret != 0) {
>>>>> +            RTE_BOND_LOG(ERR, "Failed to stop device on port %u",
>>>>> +                     slave_id);
>>>>> +            return ret;
>>>>
>>>> Should it return here or try to stop all ports?
>>>> What about to record the return status, but keep continue to stop 
>>>> all ports. And return error if any of the stop failed?
> Well, I am glad you have found something unreasaonable about 'stop'.
> Let us see API 'rte_eth_dev_stop'
> 
> rte_eth_dev_stop(dev)
> {
>      ....
>      dev->data->dev_started = 0;
>      ret = (*dev->dev_ops->dev_stop)(dev)
>      retur ret;
> }
> This is unreasaonable. No matter 'dev_ops->dev_stop' succeed or fail,
> the state 'dev_started ' will always set to be '0'.
> 
> But this does not only influence bonding device but other devices like
> eth dev or vdev.
> This is the bug in rte ethdev level. I will send another patch to fix
> it.
> 

Hi Connor,

I agree this is an issue in the API, cc'ed Andrew and Thomas.

I vaguely remember that "dev_started = 0" was required for some dev_ops, 
but not quite sure, let me check this.
At worst we can do as following to be sure:

   dev->data->dev_started = 0;
   ret = (*dev->dev_ops->dev_stop)(dev)
   if (ret)
     dev->data->dev_started = 1;

Also we need to clarify in the API documentation (.h file), what is the 
status of the device if 'rte_eth_dev_stop()' returned error.


Btw, would you be OK to separate this ethdev patch from your bonding 
patch, to not stuck your series because of ethdev one.


> 
>>> I think no need to do this. APP only see the bonded device. If bonded
>>> device stop failed, it means it works failed. And the number of 
>>> "stopped" successfully slave does not make any sense.
>>>
>>
>> OK if trying to stop as much as possible 'slave' devices doesn't make 
>> sense, we can keep as it is.
>>
>> Btw, when functions fails at this point, bonding device itself already 
>> marked as stopped, right? And some of the slave devices may be stopped 
>> already before failure.
>> I don't know how confusing this is for the user, that stop() function 
>> is failed but bonding device state is 'stopped'. I don't know if 
>> function should recover at least bonding device status (back to 
>> started) on failure, what do you think?
>>
>>>>
>>>>> +        }
>>>>> +
>>>>> +        /* active slaves need to deactivate. */
>>>>
>>>> " active slaves need to be deactivated. " ?
>>> agreed.
>>>>
>>>>>           if (find_slave_by_id(internals->active_slaves,
>>>>>                   internals->active_slave_count, slave_id) !=
>>>>> -                        internals->active_slave_count) {
>>>>> -            internals->slaves[i].last_link_status = 0;
>>>>> -            ret = rte_eth_dev_stop(slave_id);
>>>>> -            if (ret != 0) {
>>>>> -                RTE_BOND_LOG(ERR, "Failed to stop device on port %u",
>>>>> -                         slave_id);
>>>>> -                return ret;
>>>>> -            }
>>>>> +                internals->active_slave_count)
>>>>
>>>> I think original indentation for this line is better.
>>>>
>>> agreed.
>>>>>               deactivate_slave(eth_dev, slave_id);
>>>>> -        }
>>>>>       }
>>>>>       return 0;
>>>>
>>>> .
>>
>> .


  reply	other threads:[~2022-05-03 19:04 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
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 [this message]
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=0b879860-1465-4bd2-a15a-530306202586@xilinx.com \
    --to=ferruh.yigit@xilinx.com \
    --cc=arybchenko@solarflare.com \
    --cc=chas3@att.com \
    --cc=dev@dpdk.org \
    --cc=humin29@huawei.com \
    --cc=lihuisong@huawei.com \
    --cc=radu.nicolau@intel.com \
    --cc=stable@dpdk.org \
    --cc=thomas@monjalon.net \
    /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.