From: Andrew Rybchenko <arybchenko@solarflare.com>
To: "Zhang, Qi Z" <qi.z.zhang@intel.com>,
"Zhao1, Wei" <wei.zhao1@intel.com>,
"Lu, Wenzhuo" <wenzhuo.lu@intel.com>,
"Wu, Jingjing" <jingjing.wu@intel.com>,
"Iremonger, Bernard" <bernard.iremonger@intel.com>,
Adrien Mazarguil <adrien.mazarguil@6wind.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
Subject: Re: [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting ethdev info
Date: Tue, 1 Oct 2019 11:09:47 +0300 [thread overview]
Message-ID: <007f12d8-8b76-6054-e3bb-f72ce1562314@solarflare.com> (raw)
In-Reply-To: <039ED4275CED7440929022BC67E7061153DA6FFD@SHSMSX105.ccr.corp.intel.com>
On 9/30/19 11:49 AM, Zhang, Qi Z wrote:
> The issue has been fixed in below patch
> http://patchwork.dpdk.org/patch/60091/
Thanks for the fix,
Andrew.
>> -----Original Message-----
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Zhao1, Wei
>> Sent: Monday, September 30, 2019 4:44 PM
>> To: Andrew Rybchenko <arybchenko@solarflare.com>; Lu, Wenzhuo
>> <wenzhuo.lu@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>; Iremonger,
>> Bernard <bernard.iremonger@intel.com>; Adrien Mazarguil
>> <adrien.mazarguil@6wind.com>
>> Cc: dev@dpdk.org; Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
>> Subject: Re: [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting
>> ethdev info
>>
>> Hi, Ivan Ilchenko and Andrew Rybchenko
>>
>> An error is cause by this patch, it is very easy to reappear.
>> You only need to bind a ixgbe nic driver , and run up testpmd:
>> ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xff -n 4 -- -i --portmask=0xff
>> --rxq=8 --txq=8 --port-topology=loop
>>
>> Then input a rte_flow rss action cmd:
>> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / end actions
>> rss queues 4 5 end / end bad arguments
>>
>> so, rte_flow action rss can not be used after this patch.
>>
>>
>>> -----Original Message-----
>>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Andrew Rybchenko
>>> Sent: Tuesday, August 27, 2019 10:25 PM
>>> To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Wu, Jingjing
>>> <jingjing.wu@intel.com>; Iremonger, Bernard
>>> <bernard.iremonger@intel.com>; Adrien Mazarguil
>>> <adrien.mazarguil@6wind.com>
>>> Cc: dev@dpdk.org; Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
>>> Subject: [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting
>>> ethdev info
>>>
>>> From: Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
>>>
>>> Add eth_dev_info_get_print_err() which is a wrapper for
>>> rte_eth_dev_info_get() printing error if rte_eth_dev_info_get() fails
>>> and returning its status code.
>>>
>>> Signed-off-by: Ivan Ilchenko <Ivan.Ilchenko@oktetlabs.ru>
>>> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
>>> ---
>>> app/test-pmd/cmdline.c | 119
>>> ++++++++++++++++++++++++++++++++++++--------
>>> app/test-pmd/cmdline_flow.c | 5 +-
>>> app/test-pmd/config.c | 78 ++++++++++++++++++++++++-----
>>> app/test-pmd/parameters.c | 8 ++-
>>> app/test-pmd/testpmd.c | 30 ++++++++---
>>> app/test-pmd/testpmd.h | 3 ++
>>> app/test-pmd/util.c | 28 ++++++++++-
>>> 7 files changed, 228 insertions(+), 43 deletions(-)
>>>
>>> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
>>> 56783aa..d4ab143 100644
>>> --- a/app/test-pmd/cmdline.c
>>> +++ b/app/test-pmd/cmdline.c
>>> @@ -2273,6 +2273,7 @@ struct cmd_config_rss {
>>> int all_updated = 1;
>>> int diag;
>>> uint16_t i;
>>> + int ret;
>>>
>>> if (!strcmp(res->value, "all"))
>>> rss_conf.rss_hf = ETH_RSS_IP | ETH_RSS_TCP | @@ -2312,7
>>> +2313,10 @@ struct cmd_config_rss {
>>> RTE_ETH_FOREACH_DEV(i) {
>>> struct rte_eth_rss_conf local_rss_conf;
>>>
>>> - rte_eth_dev_info_get(i, &dev_info);
>>> + ret = eth_dev_info_get_print_err(i, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (use_default)
>>> rss_conf.rss_hf = dev_info.flow_type_rss_offloads;
>>>
>>> @@ -2410,9 +2414,13 @@ struct cmd_config_rss_hash_key {
>>> struct rte_eth_dev_info dev_info;
>>> uint8_t hash_key_size;
>>> uint32_t key_len;
>>> + int ret;
>>>
>>> memset(&dev_info, 0, sizeof(dev_info));
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (dev_info.hash_key_size > 0 &&
>>> dev_info.hash_key_size <= sizeof(hash_key))
>>> hash_key_size = dev_info.hash_key_size; @@ -2945,7
>>> +2953,10 @@ struct cmd_config_rss_reta {
>>> struct cmd_config_rss_reta *res = parsed_result;
>>>
>>> memset(&dev_info, 0, sizeof(dev_info));
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (dev_info.reta_size == 0) {
>>> printf("Redirection table size is 0 which is "
>>> "invalid for RSS\n");
>>> @@ -3063,9 +3074,13 @@ struct cmd_showport_reta {
>>> struct rte_eth_rss_reta_entry64 reta_conf[8];
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t max_reta_size;
>>> + int ret;
>>>
>>> memset(&dev_info, 0, sizeof(dev_info));
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> max_reta_size = RTE_MIN(dev_info.reta_size, ETH_RSS_RETA_SIZE_512);
>>> if (res->size == 0 || res->size > max_reta_size) {
>>> printf("Invalid redirection table size: %u (1-%u)\n", @@ -
>>> 3292,6 +3307,7 @@ struct cmd_config_burst {
>>> struct cmd_config_burst *res = parsed_result;
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t rec_nb_pkts;
>>> + int ret;
>>>
>>> if (!all_ports_stopped()) {
>>> printf("Please stop all ports first\n"); @@ -3305,7 +3321,10 @@
>>> struct cmd_config_burst {
>>> * size for all ports, so assume all ports are the same
>>> * NIC model and use the values from Port 0.
>>> */
>>> - rte_eth_dev_info_get(0, &dev_info);
>>> + ret = eth_dev_info_get_print_err(0, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> rec_nb_pkts =
>>> dev_info.default_rxportconf.burst_size;
>>>
>>> if (rec_nb_pkts == 0) {
>>> @@ -4375,6 +4394,7 @@ struct cmd_csum_result { {
>>> struct rte_eth_dev_info dev_info;
>>> uint64_t tx_offloads;
>>> + int ret;
>>>
>>> tx_offloads = ports[port_id].dev_conf.txmode.offloads;
>>> printf("Parse tunnel is %s\n",
>>> @@ -4393,7 +4413,10 @@ struct cmd_csum_result {
>>> (tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) ?
>>> "hw" : "sw");
>>>
>>> /* display warnings if configuration is not supported by the NIC */
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if ((tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) &&
>>> (dev_info.tx_offload_capa &
>>> DEV_TX_OFFLOAD_IPV4_CKSUM) == 0) {
>>> printf("Warning: hardware IP checksum enabled but not "
>>> @@ -4447,6 +4470,7 @@ struct cmd_csum_result {
>>> int hw = 0;
>>> uint64_t csum_offloads = 0;
>>> struct rte_eth_dev_info dev_info;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(res->port_id, ENABLED_WARN)) {
>>> printf("invalid port %d\n", res->port_id); @@ -4457,7
>>> +4481,10 @@ struct cmd_csum_result {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (!strcmp(res->mode, "set")) {
>>>
>>> if (!strcmp(res->hwsw, "hw"))
>>> @@ -4645,6 +4672,7 @@ struct cmd_tso_set_result { {
>>> struct cmd_tso_set_result *res = parsed_result;
>>> struct rte_eth_dev_info dev_info;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(res->port_id, ENABLED_WARN))
>>> return;
>>> @@ -4656,7 +4684,10 @@ struct cmd_tso_set_result {
>>> if (!strcmp(res->mode, "set"))
>>> ports[res->port_id].tso_segsz = res->tso_segsz;
>>>
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if ((ports[res->port_id].tso_segsz != 0) &&
>>> (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) {
>>> printf("Error: TSO is not supported by port %d\n", @@ -
>>> 4677,7 +4708,10 @@ struct cmd_tso_set_result {
>>> cmd_config_queue_tx_offloads(&ports[res->port_id]);
>>>
>>> /* display warnings if configuration is not supported by the NIC */
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if ((ports[res->port_id].tso_segsz != 0) &&
>>> (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) == 0) {
>>> printf("Warning: TSO enabled but not "
>>> @@ -4746,7 +4780,8 @@ struct cmd_tunnel_tso_set_result { {
>>> struct rte_eth_dev_info dev_info;
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + eth_dev_info_get_print_err(port_id, &dev_info);
>>> +
>>> if (!(dev_info.tx_offload_capa &
>>> DEV_TX_OFFLOAD_VXLAN_TNL_TSO))
>>> printf("Warning: VXLAN TUNNEL TSO not supported therefore "
>>> "not enabled for port %d\n", port_id); @@ -11184,7
>>> +11219,11 @@ struct cmd_flow_director_result {
>>> struct rte_eth_dev_info dev_info;
>>>
>>> memset(&dev_info, 0, sizeof(dev_info));
>>> - rte_eth_dev_info_get(res->port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(res->port_id,
>>> + &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> errno = 0;
>>> vf_id = strtoul(res->pf_vf + 2, &end, 10);
>>> if (errno != 0 || *end != '\0' ||
>>> @@ -14176,7 +14215,10 @@ struct cmd_macsec_offload_on_result {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) {
>>> #ifdef RTE_LIBRTE_IXGBE_PMD
>>> ret = rte_pmd_ixgbe_macsec_enable(port_id, en, rp); @@ -
>>> 14270,7 +14312,10 @@ struct cmd_macsec_offload_off_result {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MACSEC_INSERT) {
>>> #ifdef RTE_LIBRTE_IXGBE_PMD
>>> ret = rte_pmd_ixgbe_macsec_disable(port_id);
>>> @@ -17980,8 +18025,12 @@ struct cmd_rx_offload_get_capa_result {
>>> portid_t port_id = res->port_id;
>>> uint64_t queue_offloads;
>>> uint64_t port_offloads;
>>> + int ret;
>>> +
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> queue_offloads = dev_info.rx_queue_offload_capa;
>>> port_offloads = dev_info.rx_offload_capa ^ queue_offloads;
>>>
>>> @@ -18053,6 +18102,7 @@ struct cmd_rx_offload_get_configuration_result
>>> {
>>> uint64_t queue_offloads;
>>> uint16_t nb_rx_queues;
>>> int q;
>>> + int ret;
>>>
>>> printf("Rx Offloading Configuration of port %d :\n", port_id);
>>>
>>> @@ -18061,7 +18111,10 @@ struct
>>> cmd_rx_offload_get_configuration_result {
>>> print_rx_offloads(port_offloads);
>>> printf("\n");
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> nb_rx_queues = dev_info.nb_rx_queues;
>>> for (q = 0; q < nb_rx_queues; q++) {
>>> queue_offloads = port->rx_conf[q].offloads; @@ -18160,6
>>> +18213,7 @@ struct cmd_config_per_port_rx_offload_result {
>>> uint64_t single_offload;
>>> uint16_t nb_rx_queues;
>>> int q;
>>> + int ret;
>>>
>>> if (port->port_status != RTE_PORT_STOPPED) {
>>> printf("Error: Can't config offload when Port %d "
>>> @@ -18173,7 +18227,10 @@ struct cmd_config_per_port_rx_offload_result
>>> {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> nb_rx_queues = dev_info.nb_rx_queues;
>>> if (!strcmp(res->on_off, "on")) {
>>> port->dev_conf.rxmode.offloads |= single_offload; @@ -
>>> 18261,6 +18318,7 @@ struct cmd_config_per_queue_rx_offload_result {
>>> uint16_t queue_id = res->queue_id;
>>> struct rte_port *port = &ports[port_id];
>>> uint64_t single_offload;
>>> + int ret;
>>>
>>> if (port->port_status != RTE_PORT_STOPPED) {
>>> printf("Error: Can't config offload when Port %d "
>>> @@ -18268,7 +18326,10 @@ struct
>>> cmd_config_per_queue_rx_offload_result {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (queue_id >= dev_info.nb_rx_queues) {
>>> printf("Error: input queue_id should be 0 ... "
>>> "%d\n", dev_info.nb_rx_queues - 1); @@ -18374,8
>>> +18435,12 @@ struct cmd_tx_offload_get_capa_result {
>>> portid_t port_id = res->port_id;
>>> uint64_t queue_offloads;
>>> uint64_t port_offloads;
>>> + int ret;
>>> +
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> queue_offloads = dev_info.tx_queue_offload_capa;
>>> port_offloads = dev_info.tx_offload_capa ^ queue_offloads;
>>>
>>> @@ -18447,6 +18512,7 @@ struct cmd_tx_offload_get_configuration_result
>>> {
>>> uint64_t queue_offloads;
>>> uint16_t nb_tx_queues;
>>> int q;
>>> + int ret;
>>>
>>> printf("Tx Offloading Configuration of port %d :\n", port_id);
>>>
>>> @@ -18455,7 +18521,10 @@ struct
>>> cmd_tx_offload_get_configuration_result {
>>> print_tx_offloads(port_offloads);
>>> printf("\n");
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> nb_tx_queues = dev_info.nb_tx_queues;
>>> for (q = 0; q < nb_tx_queues; q++) {
>>> queue_offloads = port->tx_conf[q].offloads; @@ -18559,6
>>> +18628,7 @@ struct cmd_config_per_port_tx_offload_result {
>>> uint64_t single_offload;
>>> uint16_t nb_tx_queues;
>>> int q;
>>> + int ret;
>>>
>>> if (port->port_status != RTE_PORT_STOPPED) {
>>> printf("Error: Can't config offload when Port %d "
>>> @@ -18572,7 +18642,10 @@ struct cmd_config_per_port_tx_offload_result
>>> {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> nb_tx_queues = dev_info.nb_tx_queues;
>>> if (!strcmp(res->on_off, "on")) {
>>> port->dev_conf.txmode.offloads |= single_offload; @@ -
>>> 18663,6 +18736,7 @@ struct cmd_config_per_queue_tx_offload_result {
>>> uint16_t queue_id = res->queue_id;
>>> struct rte_port *port = &ports[port_id];
>>> uint64_t single_offload;
>>> + int ret;
>>>
>>> if (port->port_status != RTE_PORT_STOPPED) {
>>> printf("Error: Can't config offload when Port %d "
>>> @@ -18670,7 +18744,10 @@ struct
>>> cmd_config_per_queue_tx_offload_result {
>>> return;
>>> }
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (queue_id >= dev_info.nb_tx_queues) {
>>> printf("Error: input queue_id should be 0 ... "
>>> "%d\n", dev_info.nb_tx_queues - 1); diff --git
>>> a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index
>>> 4958713..369426c 100644
>>> --- a/app/test-pmd/cmdline_flow.c
>>> +++ b/app/test-pmd/cmdline_flow.c
>>> @@ -3550,7 +3550,10 @@ static int comp_vc_action_rss_queue(struct
>>> context *, const struct token *,
>>> ctx->port != (portid_t)RTE_PORT_ALL) {
>>> struct rte_eth_dev_info info;
>>>
>>> - rte_eth_dev_info_get(ctx->port, &info);
>>> + ret = rte_eth_dev_info_get(ctx->port, &info);
>>> + if (ret != 0)
>>> + return ret;
>>> +
>>> action_rss_data->conf.key_len =
>>> RTE_MIN(sizeof(action_rss_data->key),
>>> info.hash_key_size);
>>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index
>>> 1a5a5c1..0ef7c36 100644
>>> --- a/app/test-pmd/config.c
>>> +++ b/app/test-pmd/config.c
>>> @@ -471,6 +471,7 @@ static int bus_match_all(const struct rte_bus
>>> *bus, const void *data)
>>> static const char *info_border = "*********************";
>>> uint16_t mtu;
>>> char name[RTE_ETH_NAME_MAX_LEN];
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN)) {
>>> print_valid_ports();
>>> @@ -479,7 +480,11 @@ static int bus_match_all(const struct rte_bus
>>> *bus, const void *data)
>>> port = &ports[port_id];
>>> rte_eth_link_get_nowait(port_id, &link);
>>> memset(&dev_info, 0, sizeof(dev_info));
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> printf("\n%s Infos for port %-2d %s\n",
>>> info_border, port_id, info_border);
>>> rte_eth_macaddr_get(port_id, &mac_addr); @@ -618,6 +623,7 @@ static
>>> int bus_match_all(const struct rte_bus *bus, const void *data)
>>> struct rte_eth_link link;
>>> struct rte_eth_dev_info dev_info;
>>> char name[RTE_ETH_NAME_MAX_LEN];
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN)) {
>>> print_valid_ports();
>>> @@ -625,7 +631,11 @@ static int bus_match_all(const struct rte_bus
>>> *bus, const void *data)
>>> }
>>>
>>> rte_eth_link_get_nowait(port_id, &link);
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> rte_eth_dev_get_name_by_port(port_id, name);
>>> rte_eth_macaddr_get(port_id, &mac_addr);
>>>
>>> @@ -642,11 +652,14 @@ static int bus_match_all(const struct rte_bus
>>> *bus, const void *data) {
>>> struct rte_eth_dev_info dev_info;
>>> static const char *info_border = "************";
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN))
>>> return;
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>>
>>> printf("\n%s Port %d supported offload features: %s\n",
>>> info_border, port_id, info_border); @@ -1140,10 +1153,15 @@ void
>>> print_valid_ports(void) {
>>> int diag;
>>> struct rte_eth_dev_info dev_info;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN))
>>> return;
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (mtu > dev_info.max_mtu || mtu < dev_info.min_mtu) {
>>> printf("Set MTU failed. MTU:%u is not in valid range, min:%u
>>> - max:%u\n",
>>> mtu, dev_info.min_mtu, dev_info.max_mtu); @@ -
>>> 1618,13 +1636,17 @@ struct igb_ring_desc_16_bytes { #endif
>>> uint16_t desc_id)
>>> {
>>> + int ret;
>>> struct igb_ring_desc_16_bytes *ring =
>>> (struct igb_ring_desc_16_bytes *)ring_mz->addr; #ifndef
>>> RTE_LIBRTE_I40E_16BYTE_RX_DESC
>>> struct rte_eth_dev_info dev_info;
>>>
>>> memset(&dev_info, 0, sizeof(dev_info));
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (strstr(dev_info.driver_name, "i40e") != NULL) {
>>> /* 32 bytes RX descriptor, i40e only */
>>> struct igb_ring_desc_32_bytes *ring = @@ -1834,11 +1856,15 @@
>>> struct igb_ring_desc_16_bytes {
>>> int diag;
>>> struct rte_eth_dev_info dev_info;
>>> uint8_t hash_key_size;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN))
>>> return;
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (dev_info.hash_key_size > 0 &&
>>> dev_info.hash_key_size <= sizeof(rss_key))
>>> hash_key_size = dev_info.hash_key_size; @@ -2796,11
>>> +2822,15 @@ struct igb_ring_desc_16_bytes { {
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t queue;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(portid, ENABLED_WARN))
>>> return;
>>>
>>> - rte_eth_dev_info_get(portid, &dev_info);
>>> + ret = eth_dev_info_get_print_err(portid, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> for (queue = 0; queue < dev_info.nb_rx_queues; queue++)
>>> if (!ports[portid].rx_dump_cb[queue])
>>> ports[portid].rx_dump_cb[queue] =
>>> @@ -2813,10 +2843,15 @@ struct igb_ring_desc_16_bytes { {
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t queue;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(portid, ENABLED_WARN))
>>> return;
>>> - rte_eth_dev_info_get(portid, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(portid, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
>>> if (!ports[portid].tx_dump_cb[queue])
>>> ports[portid].tx_dump_cb[queue] =
>>> @@ -2829,10 +2864,15 @@ struct igb_ring_desc_16_bytes { {
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t queue;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(portid, ENABLED_WARN))
>>> return;
>>> - rte_eth_dev_info_get(portid, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(portid, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> for (queue = 0; queue < dev_info.nb_rx_queues; queue++)
>>> if (ports[portid].rx_dump_cb[queue]) {
>>> rte_eth_remove_rx_callback(portid, queue, @@ -
>>> 2846,10 +2886,15 @@ struct igb_ring_desc_16_bytes { {
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t queue;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(portid, ENABLED_WARN))
>>> return;
>>> - rte_eth_dev_info_get(portid, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(portid, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
>>> if (ports[portid].tx_dump_cb[queue]) {
>>> rte_eth_remove_tx_callback(portid, queue, @@ -
>>> 3037,6 +3082,7 @@ struct igb_ring_desc_16_bytes {
>>> tx_vlan_set(portid_t port_id, uint16_t vlan_id) {
>>> struct rte_eth_dev_info dev_info;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN))
>>> return;
>>> @@ -3048,7 +3094,11 @@ struct igb_ring_desc_16_bytes {
>>> printf("Error, as QinQ has been enabled.\n");
>>> return;
>>> }
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if ((dev_info.tx_offload_capa & DEV_TX_OFFLOAD_VLAN_INSERT) == 0) {
>>> printf("Error: vlan insert is not supported by port %d\n",
>>> port_id);
>>> @@ -3064,6 +3114,7 @@ struct igb_ring_desc_16_bytes {
>>> tx_qinq_set(portid_t port_id, uint16_t vlan_id, uint16_t vlan_id_outer) {
>>> struct rte_eth_dev_info dev_info;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(port_id, ENABLED_WARN))
>>> return;
>>> @@ -3072,7 +3123,10 @@ struct igb_ring_desc_16_bytes {
>>> if (vlan_id_is_invalid(vlan_id_outer))
>>> return;
>>>
>>> - rte_eth_dev_info_get(port_id, &dev_info);
>>> + ret = eth_dev_info_get_print_err(port_id, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if ((dev_info.tx_offload_capa & DEV_TX_OFFLOAD_QINQ_INSERT) == 0) {
>>> printf("Error: qinq insert not supported by port %d\n",
>>> port_id);
>>> diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
>>> index 5244872..6c78dca 100644
>>> --- a/app/test-pmd/parameters.c
>>> +++ b/app/test-pmd/parameters.c
>>> @@ -562,6 +562,7 @@
>>> uint64_t tx_offloads = tx_mode.offloads;
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t rec_nb_pkts;
>>> + int ret;
>>>
>>> static struct option lgopts[] = {
>>> { "help", 0, 0, 0 },
>>> @@ -1050,7 +1051,12 @@
>>> * value, on the assumption that all
>>> * ports are of the same NIC model.
>>> */
>>> - rte_eth_dev_info_get(0, &dev_info);
>>> + ret = eth_dev_info_get_print_err(
>>> + 0,
>>> + &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> rec_nb_pkts = dev_info
>>>
>>> .default_rxportconf.burst_size;
>>>
>>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
>>> e8e2a39..0117236 100644
>>> --- a/app/test-pmd/testpmd.c
>>> +++ b/app/test-pmd/testpmd.c
>>> @@ -1016,7 +1016,8 @@ struct extmem_param {
>>> struct rte_eth_dev_info dev_info;
>>>
>>> RTE_ETH_FOREACH_DEV(pi) {
>>> - rte_eth_dev_info_get(pi, &dev_info);
>>> + eth_dev_info_get_print_err(pi, &dev_info);
>>> +
>>> if (dev_info.max_rx_queues < allowed_max_rxq) {
>>> allowed_max_rxq = dev_info.max_rx_queues;
>>> *pid = pi;
>>> @@ -1062,7 +1063,8 @@ struct extmem_param {
>>> struct rte_eth_dev_info dev_info;
>>>
>>> RTE_ETH_FOREACH_DEV(pi) {
>>> - rte_eth_dev_info_get(pi, &dev_info);
>>> + eth_dev_info_get_print_err(pi, &dev_info);
>>> +
>>> if (dev_info.max_tx_queues < allowed_max_txq) {
>>> allowed_max_txq = dev_info.max_tx_queues;
>>> *pid = pi;
>>> @@ -1109,6 +1111,7 @@ struct extmem_param {
>>> uint16_t data_size;
>>> bool warning = 0;
>>> int k;
>>> + int ret;
>>>
>>> memset(port_per_socket,0,RTE_MAX_NUMA_NODES);
>>>
>>> @@ -1136,7 +1139,10 @@ struct extmem_param {
>>> /* Apply default TxRx configuration for all ports */
>>> port->dev_conf.txmode = tx_mode;
>>> port->dev_conf.rxmode = rx_mode;
>>> - rte_eth_dev_info_get(pid, &port->dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(pid, &port->dev_info);
>>> + if (ret != 0)
>>> + return;
>>>
>>> if (!(port->dev_info.tx_offload_capa &
>>> DEV_TX_OFFLOAD_MBUF_FAST_FREE)) @@ -1295,10
>>> +1301,14 @@ struct extmem_param { reconfig(portid_t new_port_id,
>>> unsigned socket_id) {
>>> struct rte_port *port;
>>> + int ret;
>>>
>>> /* Reconfiguration of Ethernet ports. */
>>> port = &ports[new_port_id];
>>> - rte_eth_dev_info_get(new_port_id, &port->dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(new_port_id, &port->dev_info);
>>> + if (ret != 0)
>>> + return;
>>>
>>> /* set flag to initialize port/queue */
>>> port->need_reconfig = 1;
>>> @@ -2927,11 +2937,16 @@ struct pmd_test_command { {
>>> portid_t pid;
>>> struct rte_port *port;
>>> + int ret;
>>>
>>> RTE_ETH_FOREACH_DEV(pid) {
>>> port = &ports[pid];
>>> port->dev_conf.fdir_conf = fdir_conf;
>>> - rte_eth_dev_info_get(pid, &port->dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(pid, &port->dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> if (nb_rxq > 1) {
>>> port->dev_conf.rx_adv_conf.rss_conf.rss_key = NULL;
>>> port->dev_conf.rx_adv_conf.rss_conf.rss_hf = @@ -
>>> 3106,7 +3121,10 @@ uint8_t port_is_bonding_slave(portid_t slave_pid)
>>> retval = rte_eth_dev_configure(pid, nb_rxq, nb_rxq, &port_conf);
>>> if (retval < 0)
>>> return retval;
>>> - rte_eth_dev_info_get(pid, &rte_port->dev_info);
>>> +
>>> + retval = eth_dev_info_get_print_err(pid, &rte_port->dev_info);
>>> + if (retval != 0)
>>> + return retval;
>>>
>>> /* If dev_info.vmdq_pool_base is greater than 0,
>>> * the queue id of vmdq pools is started after pf queues.
>>> diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index
>>> ce13eb8..d73955d 100644
>>> --- a/app/test-pmd/testpmd.h
>>> +++ b/app/test-pmd/testpmd.h
>>> @@ -822,6 +822,9 @@ void port_rss_hash_key_update(portid_t port_id,
>>> char rss_type[], void setup_gro_flush_cycles(uint8_t cycles); void
>>> show_gro(portid_t port_id); void setup_gso(const char *mode, portid_t
>>> port_id);
>>> +int eth_dev_info_get_print_err(uint16_t port_id,
>>> + struct rte_eth_dev_info *dev_info);
>>> +
>>>
>>> /* Functions to manage the set of filtered Multicast MAC addresses */
>>> void mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr);
>>> diff -- git a/app/test-pmd/util.c b/app/test-pmd/util.c index
>>> 18dfdca..009d226
>>> 100644
>>> --- a/app/test-pmd/util.c
>>> +++ b/app/test-pmd/util.c
>>> @@ -194,10 +194,15 @@
>>> {
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t queue;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(portid, ENABLED_WARN))
>>> return;
>>> - rte_eth_dev_info_get(portid, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(portid, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
>>> if (!ports[portid].tx_set_md_cb[queue])
>>> ports[portid].tx_set_md_cb[queue] = @@ -210,10 +215,15 @@
>> {
>>> struct rte_eth_dev_info dev_info;
>>> uint16_t queue;
>>> + int ret;
>>>
>>> if (port_id_is_invalid(portid, ENABLED_WARN))
>>> return;
>>> - rte_eth_dev_info_get(portid, &dev_info);
>>> +
>>> + ret = eth_dev_info_get_print_err(portid, &dev_info);
>>> + if (ret != 0)
>>> + return;
>>> +
>>> for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
>>> if (ports[portid].tx_set_md_cb[queue]) {
>>> rte_eth_remove_tx_callback(portid, queue, @@ -
>>> 221,3 +231,17 @@
>>> ports[portid].tx_set_md_cb[queue] = NULL;
>>> }
>>> }
>>> +
>>> +int
>>> +eth_dev_info_get_print_err(uint16_t port_id,
>>> + struct rte_eth_dev_info *dev_info) {
>>> + int ret;
>>> +
>>> + ret = rte_eth_dev_info_get(port_id, dev_info);
>>> + if (ret != 0)
>>> + printf("Error during getting device (port %u) info: %s\n",
>>> + port_id, strerror(-ret));
>>> +
>>> + return ret;
>>> +}
>>> --
>>> 1.8.3.1
next prev parent reply other threads:[~2019-10-01 8:10 UTC|newest]
Thread overview: 272+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-27 14:25 [dpdk-dev] [PATCH 00/51] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 01/51] " Andrew Rybchenko
2019-08-28 9:51 ` Jan Viktorin
2019-08-28 10:09 ` Andrew Rybchenko
2019-08-28 11:26 ` Jan Viktorin
2019-08-28 14:39 ` Andrew Rybchenko
2019-08-29 16:56 ` Thomas Monjalon
2019-09-02 9:33 ` Ferruh Yigit
2019-09-03 12:09 ` Andrew Rybchenko
2019-09-03 12:36 ` Ferruh Yigit
2019-08-27 14:25 ` [dpdk-dev] [PATCH 02/51] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-02 12:40 ` Ferruh Yigit
2019-09-03 11:59 ` Andrew Rybchenko
2019-09-30 8:43 ` Zhao1, Wei
2019-09-30 8:49 ` Zhang, Qi Z
2019-10-01 8:09 ` Andrew Rybchenko [this message]
2019-10-08 7:41 ` Zhao1, Wei
2019-08-27 14:25 ` [dpdk-dev] [PATCH 03/51] app/eventdev: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 04/51] kni: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 05/51] latency: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 06/51] pdump: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 07/51] ring: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 08/51] app/procinfo: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 09/51] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 10/51] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 11/51] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:44 ` Somnath Kotur
2019-08-27 14:25 ` [dpdk-dev] [PATCH 12/51] net/bonding: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 13/51] net/netvsc: " Andrew Rybchenko
2019-08-27 20:17 ` Stephen Hemminger
2019-08-28 7:06 ` Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 14/51] net/softnic: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 15/51] examples/rxtx_callbacks: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 16/51] examples/l3fwd: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 17/51] examples/qos_meter: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 18/51] examples/ip_frag: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 19/51] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 20/51] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 21/51] examples/distributor: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 22/51] examples/l3fwd-acl: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 23/51] examples/vm_power: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 24/51] examples/qos_sched: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 25/51] examples/flow_filtering: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 26/51] examples/l3fwd-power: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 27/51] examples/l2fwd: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 28/51] examples/skeleton: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 29/51] examples/vmdq_dcb: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 30/51] examples/ipv4_multicast: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 31/51] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 32/51] examples/bond: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 33/51] examples/eventdev: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 34/51] examples/ip_reassembly: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 35/51] examples/vhost: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 36/51] examples/ptpclient: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 37/51] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 38/51] examples/tep_termination: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 39/51] examples/server_node_efd: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 40/51] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 41/51] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 42/51] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 43/51] examples/multi_process: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 44/51] examples/ipsec-secgw: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 45/51] examples/netmap_compat: " Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 46/51] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 47/51] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-08-27 14:25 ` [dpdk-dev] [PATCH 48/51] examples/load_balancer: " Andrew Rybchenko
2019-08-27 14:26 ` [dpdk-dev] [PATCH 49/51] examples/kni: " Andrew Rybchenko
2019-08-27 14:26 ` [dpdk-dev] [PATCH 50/51] examples/ethtool: " Andrew Rybchenko
2019-08-27 14:26 ` [dpdk-dev] [PATCH 51/51] examples/exception_path: " Andrew Rybchenko
2019-08-27 20:47 ` [dpdk-dev] [PATCH 00/51] ethdev: change rte_eth_dev_info_get() return value to int Aaron Conole
2019-08-28 7:02 ` Andrew Rybchenko
2019-08-28 13:42 ` Aaron Conole
2019-08-28 14:29 ` Andrew Rybchenko
2019-08-29 17:05 ` Thomas Monjalon
2019-09-02 13:04 ` Ferruh Yigit
2019-09-03 12:27 ` Andrew Rybchenko
2019-09-03 13:58 ` Aaron Conole
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 00/54] " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 01/54] ethdev: remove redundunt device info cleanup before get Andrew Rybchenko
2019-09-04 8:32 ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 02/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-04 16:40 ` Ferruh Yigit
2019-09-06 7:30 ` Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 03/54] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 04/54] app/eventdev: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 05/54] kni: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 06/54] latency: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 07/54] pdump: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 08/54] ring: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 09/54] app/procinfo: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 10/54] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 11/54] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 12/54] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 13/54] net/bonding: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 14/54] net/failsafe: " Andrew Rybchenko
2019-09-03 14:20 ` Gaëtan Rivet
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 15/54] net/netvsc: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 16/54] net/softnic: " Andrew Rybchenko
2019-09-09 7:01 ` Singh, Jasvinder
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 17/54] ethdev: change eth_dev_infos_get_t to return int Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 18/54] examples/rxtx_callbacks: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 19/54] examples/l3fwd: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 20/54] examples/qos_meter: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 21/54] examples/ip_frag: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 22/54] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 23/54] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 24/54] examples/distributor: " Andrew Rybchenko
2019-09-03 13:56 ` [dpdk-dev] [PATCH v2 25/54] examples/l3fwd-acl: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 26/54] examples/vm_power: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 27/54] examples/qos_sched: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 28/54] examples/flow_filtering: " Andrew Rybchenko
2019-09-04 5:57 ` Ori Kam
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 29/54] examples/l3fwd-power: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 30/54] examples/l2fwd: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 31/54] examples/skeleton: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 32/54] examples/vmdq_dcb: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 33/54] examples/ipv4_multicast: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 34/54] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 35/54] examples/bond: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 36/54] examples/eventdev: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 37/54] examples/ip_reassembly: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 38/54] examples/vhost: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 39/54] examples/ptpclient: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 40/54] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 41/54] examples/tep_termination: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 42/54] examples/server_node_efd: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 43/54] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 44/54] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 45/54] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 46/54] examples/multi_process: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 47/54] examples/ipsec-secgw: " Andrew Rybchenko
2019-09-04 9:11 ` Akhil Goyal
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 48/54] examples/netmap_compat: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 49/54] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 50/54] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 51/54] examples/load_balancer: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 52/54] examples/kni: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 53/54] examples/ethtool: " Andrew Rybchenko
2019-09-03 13:57 ` [dpdk-dev] [PATCH v2 54/54] examples/exception_path: " Andrew Rybchenko
2019-09-03 18:14 ` [dpdk-dev] [PATCH v2 00/54] ethdev: change rte_eth_dev_info_get() return value to int Aaron Conole
2019-09-03 18:24 ` Andrew Rybchenko
2019-09-03 20:06 ` Aaron Conole
2019-09-03 20:18 ` Thomas Monjalon
2019-09-04 13:07 ` Aaron Conole
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 01/54] ethdev: remove redundunt device info cleanup before get Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 02/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-09 16:27 ` Ferruh Yigit
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 03/54] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-12 14:29 ` Iremonger, Bernard
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 04/54] app/eventdev: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 05/54] kni: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 06/54] latency: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 07/54] pdump: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 08/54] ring: " Andrew Rybchenko
2019-09-06 9:04 ` Bruce Richardson
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 09/54] app/procinfo: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 10/54] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 11/54] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 12/54] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 13/54] net/bonding: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 14/54] net/failsafe: " Andrew Rybchenko
2019-09-06 9:28 ` Gaëtan Rivet
2019-09-06 10:09 ` Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 15/54] net/netvsc: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 16/54] net/softnic: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 17/54] ethdev: change device info get callback to return int Andrew Rybchenko
2019-09-06 13:29 ` Aaron Conole
2019-09-06 13:33 ` Andrew Rybchenko
2019-09-06 14:07 ` Aaron Conole
2019-09-06 14:51 ` Ferruh Yigit
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 18/54] examples/rxtx_callbacks: check status of getting ethdev info Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 19/54] examples/l3fwd: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 20/54] examples/qos_meter: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 21/54] examples/ip_frag: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 22/54] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 23/54] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 24/54] examples/distributor: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 25/54] examples/l3fwd-acl: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 26/54] examples/vm_power: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 27/54] examples/qos_sched: " Andrew Rybchenko
2019-09-09 7:04 ` Singh, Jasvinder
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 28/54] examples/flow_filtering: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 29/54] examples/l3fwd-power: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 30/54] examples/l2fwd: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 31/54] examples/skeleton: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 32/54] examples/vmdq_dcb: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 33/54] examples/ipv4_multicast: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 34/54] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 35/54] examples/bond: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 36/54] examples/eventdev: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 37/54] examples/ip_reassembly: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 38/54] examples/vhost: " Andrew Rybchenko
2019-09-10 4:53 ` Tiwei Bie
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 39/54] examples/ptpclient: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 40/54] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 41/54] examples/tep_termination: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 42/54] examples/server_node_efd: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 43/54] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 44/54] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 45/54] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 46/54] examples/multi_process: " Andrew Rybchenko
2019-09-06 7:30 ` [dpdk-dev] [PATCH v3 47/54] examples/ipsec-secgw: " Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 48/54] examples/netmap_compat: " Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 49/54] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 50/54] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 51/54] examples/load_balancer: " Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 52/54] examples/kni: " Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 53/54] examples/ethtool: " Andrew Rybchenko
2019-09-06 7:31 ` [dpdk-dev] [PATCH v3 54/54] examples/exception_path: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 00/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 01/54] ethdev: remove redundunt device info cleanup before get Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 02/54] ethdev: change rte_eth_dev_info_get() return value to int Andrew Rybchenko
2019-09-13 10:18 ` Iremonger, Bernard
2019-09-13 10:36 ` Andrew Rybchenko
2019-09-13 10:46 ` Iremonger, Bernard
2019-09-13 10:47 ` Thomas Monjalon
2019-09-13 12:41 ` Ferruh Yigit
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 03/54] app/testpmd: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 04/54] app/eventdev: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 05/54] kni: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 06/54] latency: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 07/54] pdump: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 08/54] ring: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 09/54] app/procinfo: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 10/54] app/test: check status of getting ethdev info in bonding Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 11/54] app/test: check ethdev info get result in event Rx adapter Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 12/54] net/bnxt: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 13/54] net/bonding: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 14/54] net/failsafe: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 15/54] net/netvsc: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 16/54] net/softnic: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 17/54] ethdev: change device info get callback to return int Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 18/54] examples/rxtx_callbacks: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 19/54] examples/l3fwd: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 20/54] examples/qos_meter: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 21/54] examples/ip_frag: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 22/54] examples/performance-thread: check dev info get result Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 23/54] examples/vmdq: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 24/54] examples/distributor: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 25/54] examples/l3fwd-acl: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 26/54] examples/vm_power: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 27/54] examples/qos_sched: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 28/54] examples/flow_filtering: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 29/54] examples/l3fwd-power: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 30/54] examples/l2fwd: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 31/54] examples/skeleton: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 32/54] examples/vmdq_dcb: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 33/54] examples/ipv4_multicast: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 34/54] examples/l2fwd-jobstats: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 35/54] examples/bond: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 36/54] examples/eventdev: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 37/54] examples/ip_reassembly: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 38/54] examples/vhost: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 39/54] examples/ptpclient: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 40/54] examples/link_status_interrupt: check dev info get result Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 41/54] examples/tep_termination: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 42/54] examples/server_node_efd: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 43/54] examples/flow_classify: check status of getting ethdev info Andrew Rybchenko
2019-09-13 10:06 ` Iremonger, Bernard
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 44/54] examples/packet_ordering: check dev info get result Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 45/54] examples/l2fwd-crypto: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 46/54] examples/multi_process: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 47/54] examples/ipsec-secgw: " Andrew Rybchenko
2019-09-12 16:42 ` [dpdk-dev] [PATCH v4 48/54] examples/netmap_compat: " Andrew Rybchenko
2019-09-12 16:43 ` [dpdk-dev] [PATCH v4 49/54] examples/l2fwd-keepalive: check dev info get result Andrew Rybchenko
2019-09-12 16:43 ` [dpdk-dev] [PATCH v4 50/54] examples/ip_pipeline: check status of getting ethdev info Andrew Rybchenko
2019-09-12 16:43 ` [dpdk-dev] [PATCH v4 51/54] examples/load_balancer: " Andrew Rybchenko
2019-09-12 16:43 ` [dpdk-dev] [PATCH v4 52/54] examples/kni: " Andrew Rybchenko
2019-09-12 16:43 ` [dpdk-dev] [PATCH v4 53/54] examples/ethtool: " Andrew Rybchenko
2019-09-12 16:43 ` [dpdk-dev] [PATCH v4 54/54] examples/exception_path: " Andrew Rybchenko
2019-09-13 17:08 ` [dpdk-dev] [PATCH v4 00/54] ethdev: change rte_eth_dev_info_get() return value to int 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=007f12d8-8b76-6054-e3bb-f72ce1562314@solarflare.com \
--to=arybchenko@solarflare.com \
--cc=Ivan.Ilchenko@oktetlabs.ru \
--cc=adrien.mazarguil@6wind.com \
--cc=bernard.iremonger@intel.com \
--cc=dev@dpdk.org \
--cc=jingjing.wu@intel.com \
--cc=qi.z.zhang@intel.com \
--cc=wei.zhao1@intel.com \
--cc=wenzhuo.lu@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).