patches for DPDK stable branches
 help / color / mirror / Atom feed
From: "lihuisong (C)" <lihuisong@huawei.com>
To: Thomas Monjalon <thomas@monjalon.net>,
	Ferruh Yigit <ferruh.yigit@xilinx.com>,
	"Min Hu (Connor)" <humin29@huawei.com>,
	"Ferruh Yigit" <ferruh.yigit@intel.com>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	David Marchand <david.marchand@redhat.com>
Cc: dev <dev@dpdk.org>, dpdk stable <stable@dpdk.org>,
	Bruce Richardson <bruce.richardson@intel.com>
Subject: Re: [PATCH] ethdev: fix push new event
Date: Sat, 11 Jun 2022 16:59:36 +0800	[thread overview]
Message-ID: <f71f8591-2102-f3c7-ae5c-fb626882a081@huawei.com> (raw)
In-Reply-To: <6157663.iZASKD2KPV@thomas>


在 2022/6/7 14:44, Thomas Monjalon 写道:
> 07/06/2022 03:23, lihuisong (C):
>> 在 2022/6/3 15:42, Thomas Monjalon 写道:
>>> 02/06/2022 13:24, lihuisong (C):
>>>> 在 2022/5/30 19:10, Ferruh Yigit 写道:
>>>>> On 5/30/2022 9:28 AM, Thomas Monjalon wrote:
>>>>>> [CAUTION: External Email]
>>>>>>
>>>>>> 28/05/2022 10:53, lihuisong (C):
>>>>>>> 在 2022/5/23 22:36, Thomas Monjalon 写道:
>>>>>>>> 23/05/2022 11:51, David Marchand:
>>>>>>>>> On Sat, May 21, 2022 at 8:57 AM Min Hu
>>>>>>>>> (Connor)<humin29@huawei.com>  wrote:
>>>>>>>>>> From: Huisong Li<lihuisong@huawei.com>
>>>>>>>>>>
>>>>>>>>>> The 'state' in struct rte_eth_dev may be used to update some
>>>>>>>>>> information
>>>>>>>>>> when app receive these events. For example, when app receives a
>>>>>>>>>> new event,
>>>>>>>>>> app may get the socket id of this port by calling
>>>>>>>>>> rte_eth_dev_socket_id to
>>>>>>>>>> setup the attached port. The 'state' is used in
>>>>>>>>>> rte_eth_dev_socket_id.
>>>>>>>>>>
>>>>>>>>>> If the state isn't modified to RTE_ETH_DEV_ATTACHED before
>>>>>>>>>> pushing the new
>>>>>>>>>> event, app will get the socket id failed. So this patch moves
>>>>>>>>>> pushing event
>>>>>>>>>> operation after the state updated.
>>>>>>>>>>
>>>>>>>>>> Fixes: 99a2dd955fba ("lib: remove librte_ prefix from directory
>>>>>>>>>> names")
>>>>>>>>> A patch moving code is unlikely to be at fault.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Looking at the patch which moved those notifications in this point of
>>>>>>>>> the code, the state update was pushed after the notification on
>>>>>>>>> purpose.
>>>>>>>>> See be8cd210379a ("ethdev: fix port probing notification")
>>>>>>>>>
>>>>>>>>>         ethdev: fix port probing notification
>>>>>>>>>
>>>>>>>>>         The new device was notified as soon as it was allocated.
>>>>>>>>>         It leads to use a device which is not yet initialized.
>>>>>>>>>
>>>>>>>>>         The notification must be published after the initialization
>>>>>>>>> is done
>>>>>>>>>         by the PMD, but before the state is changed, in order to let
>>>>>>>>>         notified entities taking ownership before general availability.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Do we need an intermediate state during probing?
>>>>>>>> Possibly. Currently we have only 3 states:
>>>>>>>>        RTE_ETH_DEV_UNUSED
>>>>>>>>        RTE_ETH_DEV_ATTACHED
>>>>>>>>        RTE_ETH_DEV_REMOVED
>>>>>>>>
>>>>>>>> We may add RTE_ETH_DEV_ALLOCATED just before calling
>>>>>>>>        rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_NEW, NULL);
>>>>>>>> Then we would need to check against RTE_ETH_DEV_ALLOCATED
>>>>>>>> in some ethdev functions.
>>>>>>>>
>>>>>>> Hi, Thomas,
>>>>>>>
>>>>>>> Do you mean that we need to modify some funcions like following?
>>>>>>>
>>>>>>> int rte_eth_dev_is_valid_port(uint16_t port_id)
>>>>>>> {
>>>>>>>         if (port_id >= RTE_MAX_ETHPORTS ||
>>>>>>>             (rte_eth_devices[port_id].state != *RTE_ETH_DEV_ALLOCATED*))
>>>>>>>             return 0;
>>>>> Won't this mark ATTACHED devices as invalid?
>>>> Yes, You are right.
>>>>
>>>>> If the state flow will be as UNUSED -> ALLOCATED -> ATTACHED, above
>>>>> check should be against 'ATTACHED' I think.
>>> It should validate both ALLOCATED and ATTACHED.
>> Actually, we can only pick one, because it is an enumeration.
> You can check it is either one state or the other.
uint16_t
rte_eth_find_next(uint16_t port_id)
{
     while (port_id < RTE_MAX_ETHPORTS &&
            !(rte_eth_devices[port_id].state == RTE_ETH_DEV_ALLOCATED ||
              rte_eth_devices[port_id].state == RTE_ETH_DEV_ATTACHED))
         port_id++;

     if (port_id >= RTE_MAX_ETHPORTS)
         return RTE_MAX_ETHPORTS;

     return port_id;
}
like this, right? If so, adding 'ALLOCATED' and setting to 'ALLOCATED' 
is the same with
setting to 'ATTACHED' before sending new event.
They both meet the requirements mentioned in this patch that the device 
is a valid port
when applications receive a new event.

However, if device is taken by failsafe PMD as sub-device, the 
processing above
still doesn't satisfy the purpose of failsafe PMD when this sub-device 
push new event.

I don't know if I'm missing something. Can you explain it, Ferruh and 
Thomas?
>>>> If these check is against 'ATTACHED', it goes back to the issue this
>>>> patch mentioned.
>>>>
>>>> The failsafe PMD applications expect sending event before device state
>>>> set to 'ATTACHED'.
>>>> But other applications expect the device with 'ATTACHED' state before
>>>> send event.
>>>> They are in conflict with each other. So we can't solve this issue by
>>>> adding an
>>>> 'RTE_ETH_DEV_ALLOCATED' state.
>>>
>>> .
>
>
>
>
> .

  reply	other threads:[~2022-06-11  9:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-21  6:55 Min Hu (Connor)
2022-05-23  9:51 ` David Marchand
2022-05-23 12:33   ` Ferruh Yigit
2022-05-23 14:36   ` Thomas Monjalon
2022-05-28  8:53     ` lihuisong (C)
2022-05-30  8:28       ` Thomas Monjalon
2022-05-30 11:10         ` Ferruh Yigit
2022-06-02 11:24           ` lihuisong (C)
2022-06-03  7:42             ` Thomas Monjalon
2022-06-07  1:23               ` lihuisong (C)
2022-06-07  6:44                 ` Thomas Monjalon
2022-06-11  8:59                   ` lihuisong (C) [this message]
2022-09-27 10:29                     ` Thomas Monjalon
2022-10-08  4:06                       ` lihuisong (C)

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=f71f8591-2102-f3c7-ae5c-fb626882a081@huawei.com \
    --to=lihuisong@huawei.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=ferruh.yigit@xilinx.com \
    --cc=humin29@huawei.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).