All of lore.kernel.org
 help / color / mirror / Atom feed
From: "lihuisong (C)" <lihuisong@huawei.com>
To: "Zhang, Peng1X" <peng1x.zhang@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "andrew.rybchenko@oktetlabs.ru" <andrew.rybchenko@oktetlabs.ru>,
	"Singh, Aman Deep" <aman.deep.singh@intel.com>,
	"Zhang, Yuying" <yuying.zhang@intel.com>,
	"Zhou, YidingX" <yidingx.zhou@intel.com>
Subject: Re: [PATCH v3] app/testpmd: fix incorrect queues state of secondary process
Date: Tue, 13 Sep 2022 09:26:30 +0800	[thread overview]
Message-ID: <04c582f4-08c2-14c3-653d-4eac2e012181@huawei.com> (raw)
In-Reply-To: <CO1PR11MB51056A2D16851C69CB641922CE429@CO1PR11MB5105.namprd11.prod.outlook.com>


在 2022/9/10 17:21, Zhang, Peng1X 写道:
>
>> -----Original Message-----
>> From: lihuisong (C) <lihuisong@huawei.com>
>> Sent: Wednesday, September 7, 2022 9:53 AM
>> To: Zhang, Peng1X <peng1x.zhang@intel.com>; dev@dpdk.org
>> Cc: andrew.rybchenko@oktetlabs.ru; Singh, Aman Deep
>> <aman.deep.singh@intel.com>; Zhang, Yuying <yuying.zhang@intel.com>;
>> stable@dpdk.org
>> Subject: Re: [PATCH v3] app/testpmd: fix incorrect queues state of secondary
>> process
>>
>>
>> 在 2022/9/6 22:53, Peng Zhang 写道:
>>> Primary process could set up queues state correctly when starting
>>> port, while secondary process not. Under multi-process scenario,
>> "stream_init"
>>> function would get wrong queues state for secondary process.
>>>
>>> This commit is to get queues state from ethdev which is located in
>>> shared memory.
>>>
>>> Fixes: 3c4426db54fc ("app/testpmd: do not poll stopped queues")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Peng Zhang <peng1x.zhang@intel.com>
>>>
>>> ---
>>>    v3:
>>>    - Modify the parameter of rx or tx queue state array
>>>    v2:
>>>    - Change the way of getting secondary process queues states
>>> ---
>>>    app/test-pmd/testpmd.c | 22 +++++++++++++++++++---
>>>    1 file changed, 19 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
>>> addcbcac85..977ec4fa28 100644
>>> --- a/app/test-pmd/testpmd.c
>>> +++ b/app/test-pmd/testpmd.c
>>> @@ -75,6 +75,8 @@
>>>
>>>    #include "testpmd.h"
>>>
>>> +#include <ethdev_driver.h>
>> This header file is internal, app shouldn't use it.
> In this case not all PMDs implement 'rte_eth_rx/tx_queue_info_get()' and ethdev won't return 'dev->data->rx/tx_queue_state'.
I don't think Rx/Tx queue state needs to be put in the API above.
The queue state is modified by calling 'rte_eth_dev_rx/tx_queue_stop/start'.
Can we create a new API to report queue state? like, 
'rte_eth_dev_rx/tx_queue_state_get'.
If some PMDs do not support 'rte_eth_dev_rx/tx_queue_stop/start', the new
API always return 'START' state and preserves its original behavior.

What do you think?
>
>>> +
>>>    #ifndef MAP_HUGETLB
>>>    /* FreeBSD may not have MAP_HUGETLB (in fact, it probably doesn't) */
>>>    #define HUGE_FLAG (0x40000)
>>> @@ -2402,10 +2404,24 @@ start_packet_forwarding(int with_tx_first)
>>>    	if (!pkt_fwd_shared_rxq_check())
>>>    		return;
>>>
>>> -	if (stream_init != NULL)
>>> -		for (i = 0; i < cur_fwd_config.nb_fwd_streams; i++)
>>> -			stream_init(fwd_streams[i]);
>>> +	if (stream_init != NULL) {
>>> +		for (i = 0; i < cur_fwd_config.nb_fwd_streams; i++) {
>>> +			if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
>>> +				struct fwd_stream *fs = fwd_streams[i];
>>> +				struct rte_eth_dev_data *dev_rx_data,
>> *dev_tx_data;
>>> +
>>> +				dev_rx_data = (&rte_eth_devices[fs->rx_port])-
>>> data;
>>> +				dev_tx_data = (&rte_eth_devices[fs->tx_port])-
>>> data;
>>> +
>>> +				uint8_t rx_state = dev_rx_data-
>>> rx_queue_state[fs->rx_queue];
>>> +				ports[fs->rx_port].rxq[fs->rx_queue].state =
>> rx_state;
>>> +				uint8_t tx_state = dev_tx_data-
>>> tx_queue_state[fs->tx_queue];
>>> +				ports[fs->tx_port].txq[fs->tx_queue].state =
>> tx_state;
>>> +			}
>>>
>>> +			stream_init(fwd_streams[i]);
>>> +		}
>>> +	}
>>>
>> Suggest that an API in ethdev layer can be encapsulated to obtain the device
>> Rx/Tx queue state.
>> Both primary and secondary process get or set queue state by this API.
> Suggestion sounds good, maybe better to add a new API in ethdev layer.
>
> @andrew, what's your opinion about this solution and huisong's suggestion?
>
>>>    	port_fwd_begin = cur_fwd_config.fwd_eng->port_fwd_begin;
>>>    	if (port_fwd_begin != NULL) {
>>>    		for (i = 0; i < cur_fwd_config.nb_fwd_ports; i++) {

  reply	other threads:[~2022-09-13  1:26 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-23 18:15 [PATCH] app/testpmd: fix secondary process cannot dump packet peng1x.zhang
2022-06-23 12:10 ` Andrew Rybchenko
2022-06-29  2:55   ` lihuisong (C)
2022-07-01 11:36     ` Zhang, Peng1X
2022-07-04  2:36       ` lihuisong (C)
2022-07-04  5:28         ` Dmitry Kozlyuk
2022-07-05 10:12         ` Zhang, Peng1X
2022-07-06  2:00           ` lihuisong (C)
2022-07-06 13:40             ` Andrew Rybchenko
2022-06-27  4:53 ` Zhang, Yuying
2022-07-01  9:21 ` Zhang, Yuying
2022-08-19 10:09 ` [PATCH v2] app/testpmd: fix incorrect queues state of secondary process peng1x.zhang
2022-08-24 18:21   ` Singh, Aman Deep
2022-08-26  7:47     ` Zhang, Peng1X
2022-09-06 14:53   ` [PATCH v3] " Peng Zhang
2022-09-07  1:53     ` lihuisong (C)
2022-09-10  9:21       ` Zhang, Peng1X
2022-09-13  1:26         ` lihuisong (C) [this message]
2022-10-17  8:05           ` Andrew Rybchenko
2022-09-29  1:58         ` Zhou, YidingX
2022-10-13  3:01           ` Zhou, YidingX
2022-10-13  3:33     ` Stephen Hemminger
2022-10-14 10:11       ` Zhou, YidingX

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=04c582f4-08c2-14c3-653d-4eac2e012181@huawei.com \
    --to=lihuisong@huawei.com \
    --cc=aman.deep.singh@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=peng1x.zhang@intel.com \
    --cc=yidingx.zhou@intel.com \
    --cc=yuying.zhang@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.