DPDK patches and discussions
 help / color / mirror / Atom feed
From: huangdengdui <huangdengdui@huawei.com>
To: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com>
Cc: <dev@dpdk.org>, <ferruh.yigit@amd.com>,
	<aman.deep.singh@intel.com>, <yuying.zhang@intel.com>,
	<thomas@monjalon.net>, <andrew.rybchenko@oktetlabs.ru>,
	<liuyonglong@huawei.com>, <fengchengwen@huawei.com>,
	<haijie1@huawei.com>, <lihuisong@huawei.com>
Subject: Re: [PATCH 3/3] app/testpmd: support setting lanes
Date: Tue, 19 Mar 2024 10:38:03 +0800	[thread overview]
Message-ID: <15a34999-8c50-439d-aec0-2de9b3bbf6bb@huawei.com> (raw)
In-Reply-To: <CAKSYD4x1K5NFBpwONzbm4tJTHbtKByAjk9xS__KNN_qUhbEdTg@mail.gmail.com>



On 2024/3/16 5:47, Damodharam Ammepalli wrote:
> On Tue, Mar 12, 2024 at 12:52 AM Dengdui Huang <huangdengdui@huawei.com> wrote:
>>
>> Extended speed command for setting lane number and
>> Show info print lane number.
>>
>> Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
>> ---
>>  app/test-pmd/cmdline.c                      | 110 +++++++++++---------
>>  app/test-pmd/config.c                       |  60 +++++++----
>>  doc/guides/rel_notes/release_24_03.rst      |   1 +
>>  doc/guides/testpmd_app_ug/testpmd_funcs.rst |   3 +-
>>  4 files changed, 103 insertions(+), 71 deletions(-)
>>
>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
>> index f521a1fe9e..e66daf4bba 100644
>> --- a/app/test-pmd/cmdline.c
>> +++ b/app/test-pmd/cmdline.c
>> @@ -1356,15 +1356,20 @@ struct cmd_config_speed_all {
>>         cmdline_fixed_string_t keyword;
>>         cmdline_fixed_string_t all;
>>         cmdline_fixed_string_t item1;
>> +       cmdline_fixed_string_t lanes_item;
>>         cmdline_fixed_string_t item2;
>>         cmdline_fixed_string_t value1;
>> +       uint8_t lanes_value;
>>         cmdline_fixed_string_t value2;
>>  };
>>
>>  static int
>> -parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
>> +parse_and_check_speed_duplex(char *speedstr, uint8_t lanes, char *duplexstr,
>> +                            uint32_t *speed)
>>  {
>>
> We internally implemented a similar feature, without changing the
> existing testpmd speed cmd.
> Instead of modifying the existing command set  we can have a  separate
> cmd for the lanes
> configuration similar to FEC configuration. Our internal
> implementation looks something like this,
> without affecting existing implementations.
> testpmd> port stop 0
> testpmd> port config 0 speed_lanes 4

Hi, Damodharam,
Thanks for your review.

I think the lanes should be configured with speed and duplex,
they will eventually map to Link speed capabilities(RTE_ETH_LINK_SPEED_*).

Would it be better to add the following new command?

testpmd> port config 0 speed 200000 lanes 4 duplex full

It can be used when the driver supports setting lanes;
It cannot be used when the driver does not support the setting lanes.

what do you think?

> testpmd> port config 0 speed 200000 duplex full
> testpmd> port start 0
> testpmd> show port summary 0
> Number of available ports: 2
> Port MAC Address       Name         Driver         Status   Link         Lanes
> 0    14:23:F2:C3:BA:D2 0000:b1:00.0 net_bnxt       up  200 Gbps 4

The summary command adds print of the number of lanes.
I will implement this in the next version.

> testpmd>
> testpmd> show port info 0
> 
> ********************* Infos for port 0  *********************
> MAC address: 14:23:F2:C3:BA:D2
> Device name: 0000:b1:00.0
> Driver name: net_bnxt
> Firmware-version: 228.9.115.0
> Connect to socket: 2
> memory allocation on the socket: 2
> Link status: up
> Link speed: 200 Gbps
> Lanes: 4
> Link duplex: full-duplex
> Autoneg status: Off
> 
>> +       uint32_t speed_num;
>> +       char *endptr;
>>         int duplex;
>>
>>         if (!strcmp(duplexstr, "half")) {
>> @@ -1378,47 +1383,22 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
>>                 return -1;
>>         }
>>
>> -       if (!strcmp(speedstr, "10")) {
>> -               *speed = (duplex == RTE_ETH_LINK_HALF_DUPLEX) ?
>> -                               RTE_ETH_LINK_SPEED_10M_HD : RTE_ETH_LINK_SPEED_10M;
>> -       } else if (!strcmp(speedstr, "100")) {
>> -               *speed = (duplex == RTE_ETH_LINK_HALF_DUPLEX) ?
>> -                               RTE_ETH_LINK_SPEED_100M_HD : RTE_ETH_LINK_SPEED_100M;
>> -       } else {
>> -               if (duplex != RTE_ETH_LINK_FULL_DUPLEX) {
>> -                       fprintf(stderr, "Invalid speed/duplex parameters\n");
>> -                       return -1;
>> -               }
>> -               if (!strcmp(speedstr, "1000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_1G;
>> -               } else if (!strcmp(speedstr, "2500")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_2_5G;
>> -               } else if (!strcmp(speedstr, "5000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_5G;
>> -               } else if (!strcmp(speedstr, "10000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_10G;
>> -               } else if (!strcmp(speedstr, "25000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_25G;
>> -               } else if (!strcmp(speedstr, "40000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_40G;
>> -               } else if (!strcmp(speedstr, "50000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_50G;
>> -               } else if (!strcmp(speedstr, "100000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_100G;
>> -               } else if (!strcmp(speedstr, "200000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_200G;
>> -               } else if (!strcmp(speedstr, "400000")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_400G;
>> -               } else if (!strcmp(speedstr, "auto")) {
>> -                       *speed = RTE_ETH_LINK_SPEED_AUTONEG;
>> -               } else {
>> -                       fprintf(stderr, "Unknown speed parameter\n");
>> -                       return -1;
>> -               }
>> +       if (!strcmp(speedstr, "auto")) {
>> +               *speed = RTE_ETH_LINK_SPEED_AUTONEG;
>> +               return 0;
>>         }
>>
>> -       if (*speed != RTE_ETH_LINK_SPEED_AUTONEG)
>> -               *speed |= RTE_ETH_LINK_SPEED_FIXED;
>> +       speed_num = strtol(speedstr, &endptr, 10);
>> +       if (*endptr != '\0') {
>> +               fprintf(stderr, "Unknown speed parameter\n");
>> +               return -1;
>> +       }
>> +
>> +       *speed = rte_eth_speed_bitflag(speed_num, lanes, duplex);
>> +       if (*speed == 0) {
>> +               fprintf(stderr, "param error\n");
>> +               return -1;
>> +       }
>>
>>         return 0;
>>  }
>> @@ -1429,19 +1409,27 @@ cmd_config_speed_all_parsed(void *parsed_result,
>>                         __rte_unused void *data)
>>  {
>>         struct cmd_config_speed_all *res = parsed_result;
>> +       struct rte_eth_dev_info dev_info;
>>         uint32_t link_speed;
>>         portid_t pid;
>> +       int ret;
>>
>>         if (!all_ports_stopped()) {
>>                 fprintf(stderr, "Please stop all ports first\n");
>>                 return;
>>         }
>>
>> -       if (parse_and_check_speed_duplex(res->value1, res->value2,
>> -                       &link_speed) < 0)
>> +       if (parse_and_check_speed_duplex(res->value1, res->lanes_value,
>> +                                        res->value2, &link_speed) < 0)
>>                 return;
>>
>>         RTE_ETH_FOREACH_DEV(pid) {
>> +               ret = eth_dev_info_get_print_err(pid, &dev_info);
>> +               if (ret != 0)
>> +                       return;
>> +               if ((dev_info.dev_capa & RTE_ETH_DEV_CAPA_SETTING_LANES) == 0)
>> +                       fprintf(stderr, "The setting lane may not take effect because "
>> +                                       "the port (%u) does not support it\n", pid);
>>                 ports[pid].dev_conf.link_speeds = link_speed;
>>         }
>>
>> @@ -1460,6 +1448,11 @@ static cmdline_parse_token_string_t cmd_config_speed_all_item1 =
>>  static cmdline_parse_token_string_t cmd_config_speed_all_value1 =
>>         TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, value1,
>>                                 "10#100#1000#2500#5000#10000#25000#40000#50000#100000#200000#400000#auto");
>> +static cmdline_parse_token_string_t cmd_config_speed_all_lanes_item =
>> +       TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, lanes_item, "lanes");
>> +static cmdline_parse_token_num_t cmd_config_speed_all_lanes_value =
>> +       TOKEN_NUM_INITIALIZER(struct cmd_config_speed_all, lanes_value,
>> +                             RTE_UINT8);
>>  static cmdline_parse_token_string_t cmd_config_speed_all_item2 =
>>         TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item2, "duplex");
>>  static cmdline_parse_token_string_t cmd_config_speed_all_value2 =
>> @@ -1470,14 +1463,16 @@ static cmdline_parse_inst_t cmd_config_speed_all = {
>>         .f = cmd_config_speed_all_parsed,
>>         .data = NULL,
>>         .help_str = "port config all speed "
>> -               "10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto duplex "
>> -                                                       "half|full|auto",
>> +               "10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto"
>> +               " lanes 1|2|4|8 duplex half|full|auto",
>>         .tokens = {
>>                 (void *)&cmd_config_speed_all_port,
>>                 (void *)&cmd_config_speed_all_keyword,
>>                 (void *)&cmd_config_speed_all_all,
>>                 (void *)&cmd_config_speed_all_item1,
>>                 (void *)&cmd_config_speed_all_value1,
>> +               (void *)&cmd_config_speed_all_lanes_item,
>> +               (void *)&cmd_config_speed_all_lanes_value,
>>                 (void *)&cmd_config_speed_all_item2,
>>                 (void *)&cmd_config_speed_all_value2,
>>                 NULL,
>> @@ -1490,8 +1485,10 @@ struct cmd_config_speed_specific {
>>         cmdline_fixed_string_t keyword;
>>         portid_t id;
>>         cmdline_fixed_string_t item1;
>> +       cmdline_fixed_string_t lanes_item;
>>         cmdline_fixed_string_t item2;
>>         cmdline_fixed_string_t value1;
>> +       uint8_t lanes_value;
>>         cmdline_fixed_string_t value2;
>>  };
>>
>> @@ -1501,7 +1498,9 @@ cmd_config_speed_specific_parsed(void *parsed_result,
>>                                 __rte_unused void *data)
>>  {
>>         struct cmd_config_speed_specific *res = parsed_result;
>> +       struct rte_eth_dev_info dev_info;
>>         uint32_t link_speed;
>> +       int ret;
>>
>>         if (port_id_is_invalid(res->id, ENABLED_WARN))
>>                 return;
>> @@ -1511,8 +1510,15 @@ cmd_config_speed_specific_parsed(void *parsed_result,
>>                 return;
>>         }
>>
>> -       if (parse_and_check_speed_duplex(res->value1, res->value2,
>> -                       &link_speed) < 0)
>> +       ret = eth_dev_info_get_print_err(res->id, &dev_info);
>> +       if (ret != 0)
>> +               return;
>> +       if ((dev_info.dev_capa & RTE_ETH_DEV_CAPA_SETTING_LANES) == 0)
>> +               fprintf(stderr, "The setting lane may not take effect because "
>> +                               "the port (%d) does not support it\n", res->id);
>> +
>> +       if (parse_and_check_speed_duplex(res->value1, res->lanes_value,
>> +                                        res->value2, &link_speed) < 0)
>>                 return;
>>
>>         ports[res->id].dev_conf.link_speeds = link_speed;
>> @@ -1535,6 +1541,12 @@ static cmdline_parse_token_string_t cmd_config_speed_specific_item1 =
>>  static cmdline_parse_token_string_t cmd_config_speed_specific_value1 =
>>         TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, value1,
>>                                 "10#100#1000#2500#5000#10000#25000#40000#50000#100000#200000#400000#auto");
>> +static cmdline_parse_token_string_t cmd_config_speed_specific_lanes_item =
>> +       TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, lanes_item,
>> +                                                               "lanes");
>> +static cmdline_parse_token_num_t cmd_config_speed_specific_lanes_value =
>> +       TOKEN_NUM_INITIALIZER(struct cmd_config_speed_specific, lanes_value,
>> +                             RTE_UINT8);
>>  static cmdline_parse_token_string_t cmd_config_speed_specific_item2 =
>>         TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, item2,
>>                                                                 "duplex");
>> @@ -1546,14 +1558,16 @@ static cmdline_parse_inst_t cmd_config_speed_specific = {
>>         .f = cmd_config_speed_specific_parsed,
>>         .data = NULL,
>>         .help_str = "port config <port_id> speed "
>> -               "10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto duplex "
>> -                                                       "half|full|auto",
>> +               "10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto"
>> +               " lanes 1|2|4|8 duplex half|full|auto",
>>         .tokens = {
>>                 (void *)&cmd_config_speed_specific_port,
>>                 (void *)&cmd_config_speed_specific_keyword,
>>                 (void *)&cmd_config_speed_specific_id,
>>                 (void *)&cmd_config_speed_specific_item1,
>>                 (void *)&cmd_config_speed_specific_value1,
>> +               (void *)&cmd_config_speed_specific_lanes_item,
>> +               (void *)&cmd_config_speed_specific_lanes_value,
>>                 (void *)&cmd_config_speed_specific_item2,
>>                 (void *)&cmd_config_speed_specific_value2,
>>                 NULL,
>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
>> index 968d2164ab..c104327878 100644
>> --- a/app/test-pmd/config.c
>> +++ b/app/test-pmd/config.c
>> @@ -587,39 +587,51 @@ device_infos_display_speeds(uint32_t speed_capa)
>>         if (speed_capa == RTE_ETH_LINK_SPEED_AUTONEG)
>>                 printf(" Autonegotiate (all speeds)");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_FIXED)
>> -               printf(" Disable autonegotiate (fixed speed)  ");
>> +               printf(" Disable autonegotiate (fixed speed) /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_10M_HD)
>> -               printf(" 10 Mbps half-duplex  ");
>> +               printf(" 10Mbps_1lane_half-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_10M)
>> -               printf(" 10 Mbps full-duplex  ");
>> +               printf(" 10Mbps_1lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_100M_HD)
>> -               printf(" 100 Mbps half-duplex  ");
>> +               printf(" 100Mbps_lane_half-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_100M)
>> -               printf(" 100 Mbps full-duplex  ");
>> +               printf(" 100Mbps_1lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_1G)
>> -               printf(" 1 Gbps  ");
>> +               printf(" 1Gbps_1lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_2_5G)
>> -               printf(" 2.5 Gbps  ");
>> +               printf(" 2.5Gbps_1lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_5G)
>> -               printf(" 5 Gbps  ");
>> +               printf(" 5Gbps_1lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_10G)
>> -               printf(" 10 Gbps  ");
>> -       if (speed_capa & RTE_ETH_LINK_SPEED_20G)
>> -               printf(" 20 Gbps  ");
>> +               printf(" 10Gbps_1lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_10G_4LANES)
>> +               printf(" 10Gbps_4lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_20G_2LANES)
>> +               printf(" 20Gbps_2lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_25G)
>> -               printf(" 25 Gbps  ");
>> -       if (speed_capa & RTE_ETH_LINK_SPEED_40G)
>> -               printf(" 40 Gbps  ");
>> +               printf(" 25Gbps_1lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_40G_4LANES)
>> +               printf(" 40Gbps_4lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_50G)
>> -               printf(" 50 Gbps  ");
>> -       if (speed_capa & RTE_ETH_LINK_SPEED_56G)
>> -               printf(" 56 Gbps  ");
>> +               printf(" 50Gbps_1lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_50G_2LANES)
>> +               printf(" 50Gbps_2lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_56G_4LANES)
>> +               printf(" 56Gbps_4lane_full-duplex /");
>>         if (speed_capa & RTE_ETH_LINK_SPEED_100G)
>> -               printf(" 100 Gbps  ");
>> -       if (speed_capa & RTE_ETH_LINK_SPEED_200G)
>> -               printf(" 200 Gbps  ");
>> -       if (speed_capa & RTE_ETH_LINK_SPEED_400G)
>> -               printf(" 400 Gbps  ");
>> +               printf(" 100Gbps_1lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_100G_2LANES)
>> +               printf(" 100Gbps_2lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_100G_4LANES)
>> +               printf(" 100Gbps_4lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_200G_4LANES)
>> +               printf(" 200Gbps_4lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_200G_2LANES)
>> +               printf(" 200Gbps_2lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_400G_4LANES)
>> +               printf(" 400Gbps_4lane_full-duplex /");
>> +       if (speed_capa & RTE_ETH_LINK_SPEED_400G_8LANES)
>> +               printf(" 400Gbps_8lane_full-duplex /");
>>  }
>>
>>  void
>> @@ -828,6 +840,10 @@ port_infos_display(portid_t port_id)
>>
>>         printf("\nLink status: %s\n", (link.link_status) ? ("up") : ("down"));
>>         printf("Link speed: %s\n", rte_eth_link_speed_to_str(link.link_speed));
>> +       if (link.link_lanes == 0)
>> +               printf("Link lanes: unknown\n");
>> +       else
>> +               printf("Link lanes: %u\n", link.link_lanes);
>>         printf("Link duplex: %s\n", (link.link_duplex == RTE_ETH_LINK_FULL_DUPLEX) ?
>>                ("full-duplex") : ("half-duplex"));
>>         printf("Autoneg status: %s\n", (link.link_autoneg == RTE_ETH_LINK_AUTONEG) ?
>> diff --git a/doc/guides/rel_notes/release_24_03.rst b/doc/guides/rel_notes/release_24_03.rst
>> index c17334ac25..46aceeee93 100644
>> --- a/doc/guides/rel_notes/release_24_03.rst
>> +++ b/doc/guides/rel_notes/release_24_03.rst
>> @@ -79,6 +79,7 @@ New Features
>>  * **Support setting lanes for ethdev.**
>>    * Support setting lanes by extended ``RTE_ETH_LINK_SPEED_*``.
>>    * Added function to convert bitmap flag to the struct of link speed info.
>> +  ``rte_eth_speed_capa_to_info()``
>>
>>  * **Added hash calculation of an encapsulated packet as done by the HW.**
>>
>> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>> index 2fbf9220d8..087f7fe853 100644
>> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>> @@ -190,6 +190,7 @@ For example:
>>     memory allocation on the socket: 0
>>     Link status: up
>>     Link speed: 40000 Mbps
>> +   Link lanes: 4
>>     Link duplex: full-duplex
>>     Promiscuous mode: enabled
>>     Allmulticast mode: disabled
>> @@ -2065,7 +2066,7 @@ port config - speed
>>  Set the speed and duplex mode for all ports or a specific port::
>>
>>     testpmd> port config (port_id|all) speed (10|100|1000|2500|5000|10000|25000|40000|50000|100000|200000|400000|auto) \
>> -            duplex (half|full|auto)
>> +            lanes 1|2|4|8 duplex (half|full|auto)
>>
>>  port config - queues/descriptors
>>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> --
>> 2.33.0
>>
> 

  reply	other threads:[~2024-03-19  2:38 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-12  7:52 [PATCH 0/3] " Dengdui Huang
2024-03-12  7:52 ` [PATCH 1/3] ethdev: " Dengdui Huang
2024-03-19  3:02   ` Stephen Hemminger
2024-03-20  1:16     ` huangdengdui
2024-03-12  7:52 ` [PATCH 2/3] net/hns3: " Dengdui Huang
2024-03-12  7:52 ` [PATCH 3/3] app/testpmd: " Dengdui Huang
2024-03-15 21:47   ` Damodharam Ammepalli
2024-03-19  2:38     ` huangdengdui [this message]
2024-03-22  7:09   ` [PATCH v2 0/6] " Dengdui Huang
2024-03-22  7:09     ` [PATCH v2 1/6] ethdev: " Dengdui Huang
2024-03-22 13:58       ` Thomas Monjalon
2024-03-22 15:15         ` Ajit Khaparde
2024-03-22 17:32           ` Tyler Retzlaff
2024-03-22 22:30             ` Damodharam Ammepalli
2024-03-25  6:24         ` huangdengdui
2024-03-25  9:30           ` Thomas Monjalon
2024-03-25 21:14             ` Damodharam Ammepalli
2024-03-26  1:42             ` lihuisong (C)
2024-03-26  3:45               ` Ajit Khaparde
2024-03-26 10:30               ` Thomas Monjalon
2024-03-26 11:15                 ` lihuisong (C)
2024-03-26 13:47                   ` Ajit Khaparde
2024-03-26 18:11                     ` Ajit Khaparde
2024-03-26 18:21                       ` Damodharam Ammepalli
2024-03-30 11:38                         ` huangdengdui
2024-04-01 20:07                           ` Thomas Monjalon
2024-04-01 22:29                             ` Damodharam Ammepalli
2024-04-02  8:37                             ` huangdengdui
2024-04-02 15:28                               ` Stephen Hemminger
2024-04-04 13:45                               ` Ferruh Yigit
2024-03-29  3:25                     ` lihuisong (C)
2024-03-22  7:09     ` [PATCH v2 2/6] test: updated UT for " Dengdui Huang
2024-03-22  7:09     ` [PATCH v2 3/6] ethdev: add function to parse link mode info Dengdui Huang
2024-03-22  7:09     ` [PATCH v2 4/6] net/hns3: use parse link mode info function Dengdui Huang
2024-03-22  7:09     ` [PATCH v2 5/6] net/hns3: support setting lanes Dengdui Huang
2024-03-22  7:09     ` [PATCH v2 6/6] app/testpmd: " Dengdui Huang
2024-04-04 13:58     ` [PATCH v2 0/6] " Ferruh Yigit
2024-05-16 12:48       ` huangdengdui
2024-03-18 14:56 ` [PATCH 0/3] " Thomas Monjalon
2024-03-18 21:26   ` Damodharam Ammepalli
2024-03-18 21:42     ` Stephen Hemminger
2024-03-18 22:55       ` Ajit Khaparde
2024-03-20 11:41     ` Thomas Monjalon
2024-03-20 12:31     ` Ferruh Yigit
2024-03-21  2:02       ` huangdengdui
2024-03-21  8:28         ` Thomas Monjalon
2024-03-22  2:28           ` huangdengdui
2024-03-22  4:38             ` Jerin Jacob
2024-03-22  5:25               ` Ajit Khaparde
2024-03-22  5:51                 ` Jerin Jacob
2024-03-22 13:51                   ` Thomas Monjalon
2024-03-25 14:04                     ` Jerin Jacob

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=15a34999-8c50-439d-aec0-2de9b3bbf6bb@huawei.com \
    --to=huangdengdui@huawei.com \
    --cc=aman.deep.singh@intel.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=damodharam.ammepalli@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=fengchengwen@huawei.com \
    --cc=ferruh.yigit@amd.com \
    --cc=haijie1@huawei.com \
    --cc=lihuisong@huawei.com \
    --cc=liuyonglong@huawei.com \
    --cc=thomas@monjalon.net \
    --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 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).