From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: Timothy McDaniel <timothy.mcdaniel@intel.com>,
Shepard Siegel <shepard.siegel@atomicrules.com>,
Ed Czeck <ed.czeck@atomicrules.com>,
John Miller <john.miller@atomicrules.com>,
Rosen Xu <rosen.xu@intel.com>, Matan Azrad <matan@nvidia.com>,
Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
Ori Kam <orika@nvidia.com>, Suanming Mou <suanmingm@nvidia.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
Tianfei Zhang <tianfei.zhang@intel.com>,
Xiao Wang <xiao.w.wang@intel.com>,
Maxime Coquelin <maxime.coquelin@redhat.com>,
Chenbo Xia <chenbo.xia@intel.com>,
Anatoly Burakov <anatoly.burakov@intel.com>,
Bruce Richardson <bruce.richardson@intel.com>,
Harman Kalra <hkalra@marvell.com>,
Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>,
Dmitry Malloy <dmitrym@microsoft.com>,
Pallavi Kadam <pallavi.kadam@intel.com>,
Naga Harish K S V <s.v.naga.harish.k@intel.com>,
Jerin Jacob <jerinj@marvell.com>,
Ciara Power <ciara.power@intel.com>
Subject: [PATCH] set namespace prefix to threads
Date: Mon, 3 Jul 2023 13:23:01 +0200 [thread overview]
Message-ID: <20230703112359.5067-1-thomas@monjalon.net> (raw)
When looking at threads in a system, it can be confusing
to find some unknown threads without a clue it is started by DPDK.
Let's start all thread names with "dpdk-"
and the driver name if it comes from a driver.
One more constraint: the thread names are generally limited
to 16 characters, including NUL character.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
Please review carefully, I may have missed things.
Note: we should use rte_ctrl_thread_create() as much as possible.
---
app/test/test_lcores.c | 2 +-
drivers/event/dlb2/pf/base/dlb2_osdep.h | 2 +-
drivers/net/ark/ark_ethdev.c | 4 ++--
drivers/net/ipn3ke/ipn3ke_representor.c | 2 +-
drivers/net/kni/rte_eth_kni.c | 2 +-
drivers/net/mlx5/mlx5_hws_cnt.c | 2 +-
drivers/net/sfc/sfc_mae_counter.c | 2 +-
drivers/raw/ifpga/ifpga_rawdev.c | 2 +-
drivers/vdpa/ifc/ifcvf_vdpa.c | 6 +++---
drivers/vdpa/mlx5/mlx5_vdpa_cthread.c | 2 +-
drivers/vdpa/mlx5/mlx5_vdpa_event.c | 2 +-
examples/vhost/main.c | 4 ++--
examples/vhost_blk/vhost_blk.c | 2 +-
lib/eal/common/eal_common_proc.c | 2 +-
lib/eal/freebsd/eal.c | 2 +-
lib/eal/freebsd/eal_interrupts.c | 2 +-
lib/eal/linux/eal.c | 2 +-
lib/eal/linux/eal_interrupts.c | 2 +-
lib/eal/linux/eal_timer.c | 2 +-
lib/eal/windows/eal.c | 2 +-
lib/eventdev/rte_event_eth_rx_adapter.c | 2 +-
lib/telemetry/telemetry.c | 4 ++--
lib/vhost/socket.c | 4 ++--
lib/vhost/vduse.c | 2 +-
24 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/app/test/test_lcores.c b/app/test/test_lcores.c
index 2c945b0136..9522663f1a 100644
--- a/app/test/test_lcores.c
+++ b/app/test/test_lcores.c
@@ -362,7 +362,7 @@ test_ctrl_thread(void)
/* Create one control thread */
t = &ctrl_thread_context;
t->state = Thread_INIT;
- if (rte_ctrl_thread_create((pthread_t *)&t->id, "test_ctrl_threads",
+ if (rte_ctrl_thread_create((pthread_t *)&t->id, "dpdk-test-ctrlt",
NULL, ctrl_thread_loop, t) != 0)
return -1;
diff --git a/drivers/event/dlb2/pf/base/dlb2_osdep.h b/drivers/event/dlb2/pf/base/dlb2_osdep.h
index cffe22f3c5..75860cca4d 100644
--- a/drivers/event/dlb2/pf/base/dlb2_osdep.h
+++ b/drivers/event/dlb2/pf/base/dlb2_osdep.h
@@ -200,7 +200,7 @@ static inline void os_schedule_work(struct dlb2_hw *hw)
dlb2_dev = container_of(hw, struct dlb2_dev, hw);
ret = rte_ctrl_thread_create(&complete_queue_map_unmap_thread,
- "dlb_queue_unmap_waiter",
+ "dpdk-dlb-qunmap",
NULL,
dlb2_complete_queue_map_unmap,
dlb2_dev);
diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
index b2995427c8..30814650bf 100644
--- a/drivers/net/ark/ark_ethdev.c
+++ b/drivers/net/ark/ark_ethdev.c
@@ -600,11 +600,11 @@ eth_ark_dev_start(struct rte_eth_dev *dev)
if (!ark->isvf && ark->start_pg && !ark->pg_running) {
pthread_t thread;
- /* Delay packet generatpr start allow the hardware to be ready
+ /* Delay packet generator start allow the hardware to be ready
* This is only used for sanity checking with internal generator
*/
char tname[32];
- snprintf(tname, sizeof(tname), "ark-delay-pg-%d",
+ snprintf(tname, sizeof(tname), "dpdk-ark-pg%d",
dev->data->port_id);
if (rte_ctrl_thread_create(&thread, tname, NULL,
diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
index e50fc73f43..c82f8b5333 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -2593,7 +2593,7 @@ ipn3ke_rpst_scan_check(void)
if (ipn3ke_rpst_scan_num == 1) {
ret = rte_ctrl_thread_create(&ipn3ke_rpst_scan_thread,
- "ipn3ke scanner",
+ "dpdk-ipn3ke-scn",
NULL,
ipn3ke_rpst_scan_handle_request, NULL);
if (ret) {
diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c
index c0e1f8db40..6b90c4e9b5 100644
--- a/drivers/net/kni/rte_eth_kni.c
+++ b/drivers/net/kni/rte_eth_kni.c
@@ -163,7 +163,7 @@ eth_kni_dev_start(struct rte_eth_dev *dev)
internals->stop_thread = 0;
ret = rte_ctrl_thread_create(&internals->thread,
- "kni_handle_req", NULL,
+ "dpdk-kni-req", NULL,
kni_handle_request, internals);
if (ret) {
PMD_LOG(ERR,
diff --git a/drivers/net/mlx5/mlx5_hws_cnt.c b/drivers/net/mlx5/mlx5_hws_cnt.c
index d98df68f39..415bb7dae4 100644
--- a/drivers/net/mlx5/mlx5_hws_cnt.c
+++ b/drivers/net/mlx5/mlx5_hws_cnt.c
@@ -453,7 +453,7 @@ mlx5_hws_cnt_service_thread_create(struct mlx5_dev_ctx_shared *sh)
DRV_LOG(ERR, "Failed to create HW steering's counter service thread.");
return -ENOSYS;
}
- snprintf(name, CNT_THREAD_NAME_MAX - 1, "%s/svc@%d",
+ snprintf(name, CNT_THREAD_NAME_MAX - 1, "dpdk-mlx5-hws-%s/svc@%d",
sh->ibdev_name, service_core);
rte_thread_set_name((rte_thread_t){(uintptr_t)sh->cnt_svc->service_thread},
name);
diff --git a/drivers/net/sfc/sfc_mae_counter.c b/drivers/net/sfc/sfc_mae_counter.c
index 79043ff7d7..631b54afeb 100644
--- a/drivers/net/sfc/sfc_mae_counter.c
+++ b/drivers/net/sfc/sfc_mae_counter.c
@@ -711,7 +711,7 @@ sfc_mae_counter_thread_spawn(struct sfc_adapter *sa,
counter_registry->polling.thread.run = true;
rc = rte_ctrl_thread_create(&sa->mae.counter_registry.polling.thread.id,
- "mae_counter_thread", NULL,
+ "dpdk-sfc-maecnt", NULL,
sfc_mae_counter_thread, sa);
return rc;
diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c
index b9f6f432c8..a7b18299de 100644
--- a/drivers/raw/ifpga/ifpga_rawdev.c
+++ b/drivers/raw/ifpga/ifpga_rawdev.c
@@ -551,7 +551,7 @@ ifpga_monitor_start_func(struct ifpga_rawdev *dev)
if (!__atomic_fetch_add(&ifpga_monitor_refcnt, 1, __ATOMIC_RELAXED)) {
ret = rte_ctrl_thread_create(&ifpga_monitor_start_thread,
- "ifpga-monitor", NULL,
+ "dpdk-ifpga-mon", NULL,
ifpga_rawdev_gsd_handle, NULL);
if (ret != 0) {
ifpga_monitor_start_thread = 0;
diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c
index e4133568c1..55346bbc08 100644
--- a/drivers/vdpa/ifc/ifcvf_vdpa.c
+++ b/drivers/vdpa/ifc/ifcvf_vdpa.c
@@ -570,7 +570,7 @@ setup_notify_relay(struct ifcvf_internal *internal)
char name[THREAD_NAME_LEN];
int ret;
- snprintf(name, sizeof(name), "ifc-notify-%d", internal->vid);
+ snprintf(name, sizeof(name), "dpdk-ifc-noti%d", internal->vid);
ret = rte_ctrl_thread_create(&internal->tid, name, NULL, notify_relay,
(void *)internal);
if (ret != 0) {
@@ -681,7 +681,7 @@ setup_intr_relay(struct ifcvf_internal *internal)
char name[THREAD_NAME_LEN];
int ret;
- snprintf(name, sizeof(name), "ifc-intr-%d", internal->vid);
+ snprintf(name, sizeof(name), "dpdk-ifc-int%d", internal->vid);
ret = rte_ctrl_thread_create(&internal->intr_tid, name, NULL,
intr_relay, (void *)internal);
if (ret) {
@@ -1019,7 +1019,7 @@ setup_vring_relay(struct ifcvf_internal *internal)
char name[THREAD_NAME_LEN];
int ret;
- snprintf(name, sizeof(name), "ifc-vring-%d", internal->vid);
+ snprintf(name, sizeof(name), "dpdk-ifc-ring%d", internal->vid);
ret = rte_ctrl_thread_create(&internal->tid, name, NULL, vring_relay,
(void *)internal);
if (ret != 0) {
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_cthread.c b/drivers/vdpa/mlx5/mlx5_vdpa_cthread.c
index 6e6624e5a3..a1d291bf71 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_cthread.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_cthread.c
@@ -312,7 +312,7 @@ mlx5_vdpa_c_thread_create(int cpu_core)
"vdpa multi-threads %d.", thrd_idx);
goto c_thread_err;
}
- snprintf(name, sizeof(name), "vDPA-mthread-%d", thrd_idx);
+ snprintf(name, sizeof(name), "dpdk-vmlx5-c%d", thrd_idx);
ret = pthread_setname_np(
conf_thread_mng.cthrd[thrd_idx].tid, name);
if (ret)
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_event.c b/drivers/vdpa/mlx5/mlx5_vdpa_event.c
index f3d392c73d..c486ded598 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_event.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_event.c
@@ -546,7 +546,7 @@ mlx5_vdpa_cqe_event_setup(struct mlx5_vdpa_priv *priv)
DRV_LOG(ERR, "Failed to set thread affinity.");
goto out;
}
- snprintf(name, sizeof(name), "vDPA-mlx5-%d", priv->vid);
+ snprintf(name, sizeof(name), "dpdk-vmlx5-%d", priv->vid);
rte_thread_set_name((rte_thread_t){(uintptr_t)priv->timer_tid}, name);
out:
if (attrp != NULL)
diff --git a/examples/vhost/main.c b/examples/vhost/main.c
index bfe466ff77..9ff2c1f31b 100644
--- a/examples/vhost/main.c
+++ b/examples/vhost/main.c
@@ -1986,11 +1986,11 @@ main(int argc, char *argv[])
/* Enable stats if the user option is set. */
if (enable_stats) {
- ret = rte_ctrl_thread_create(&tid, "print-stats", NULL,
+ ret = rte_ctrl_thread_create(&tid, "dpdk-vhost-stat", NULL,
print_stats, NULL);
if (ret < 0)
rte_exit(EXIT_FAILURE,
- "Cannot create print-stats thread\n");
+ "Cannot create dpdk-vhost-stat thread\n");
}
/* Launch all data cores. */
diff --git a/examples/vhost_blk/vhost_blk.c b/examples/vhost_blk/vhost_blk.c
index 3709d7ed06..45699eb0b3 100644
--- a/examples/vhost_blk/vhost_blk.c
+++ b/examples/vhost_blk/vhost_blk.c
@@ -686,7 +686,7 @@ new_device(int vid)
/* start polling vring */
worker_thread_status = WORKER_STATE_START;
fprintf(stdout, "New Device %s, Device ID %d\n", path, vid);
- if (rte_ctrl_thread_create(&tid, "vhostblk-ctrlr", NULL,
+ if (rte_ctrl_thread_create(&tid, "dpdk-vhost-blk", NULL,
&ctrlr_worker, ctrlr) != 0) {
fprintf(stderr, "Worker Thread Started Failed\n");
return -1;
diff --git a/lib/eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c
index 7a038e0a3c..39ee9bcd7e 100644
--- a/lib/eal/common/eal_common_proc.c
+++ b/lib/eal/common/eal_common_proc.c
@@ -635,7 +635,7 @@ rte_mp_channel_init(void)
return -1;
}
- if (rte_ctrl_thread_create(&mp_handle_tid, "rte_mp_handle",
+ if (rte_ctrl_thread_create(&mp_handle_tid, "dpdk-mp-msg",
NULL, mp_handle, NULL) < 0) {
RTE_LOG(ERR, EAL, "failed to create mp thread: %s\n",
strerror(errno));
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index 7008303e11..e201acd1c2 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -843,7 +843,7 @@ rte_eal_init(int argc, char **argv)
/* Set thread_name for aid in debugging. */
snprintf(thread_name, sizeof(thread_name),
- "rte-worker-%d", i);
+ "dpdk-worker-%d", i);
rte_thread_set_name(lcore_config[i].thread_id, thread_name);
ret = rte_thread_set_affinity_by_id(lcore_config[i].thread_id,
diff --git a/lib/eal/freebsd/eal_interrupts.c b/lib/eal/freebsd/eal_interrupts.c
index ffcf97ad4c..68cdb9deb3 100644
--- a/lib/eal/freebsd/eal_interrupts.c
+++ b/lib/eal/freebsd/eal_interrupts.c
@@ -637,7 +637,7 @@ rte_eal_intr_init(void)
}
/* create the host thread to wait/handle the interrupt */
- ret = rte_ctrl_thread_create(&intr_thread, "eal-intr-thread", NULL,
+ ret = rte_ctrl_thread_create(&intr_thread, "dpdk-intr", NULL,
eal_intr_thread_main, NULL);
if (ret != 0) {
rte_errno = -ret;
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 145afafde2..655653e2c1 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -1272,7 +1272,7 @@ rte_eal_init(int argc, char **argv)
/* Set thread_name for aid in debugging. */
snprintf(thread_name, sizeof(thread_name),
- "rte-worker-%d", i);
+ "dpdk-worker-%d", i);
rte_thread_set_name(lcore_config[i].thread_id, thread_name);
ret = rte_thread_set_affinity_by_id(lcore_config[i].thread_id,
diff --git a/lib/eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c
index c9881143be..19b36787b8 100644
--- a/lib/eal/linux/eal_interrupts.c
+++ b/lib/eal/linux/eal_interrupts.c
@@ -1188,7 +1188,7 @@ rte_eal_intr_init(void)
}
/* create the host thread to wait/handle the interrupt */
- ret = rte_ctrl_thread_create(&intr_thread, "eal-intr-thread", NULL,
+ ret = rte_ctrl_thread_create(&intr_thread, "dpdk-intr", NULL,
eal_intr_thread_main, NULL);
if (ret != 0) {
rte_errno = -ret;
diff --git a/lib/eal/linux/eal_timer.c b/lib/eal/linux/eal_timer.c
index 95c8cca992..1898709700 100644
--- a/lib/eal/linux/eal_timer.c
+++ b/lib/eal/linux/eal_timer.c
@@ -176,7 +176,7 @@ rte_eal_hpet_init(int make_default)
/* create a thread that will increment a global variable for
* msb (hpet is 32 bits by default under linux) */
- ret = rte_ctrl_thread_create(&msb_inc_thread_id, "hpet-msb-inc", NULL,
+ ret = rte_ctrl_thread_create(&msb_inc_thread_id, "dpdk-hpet-msb", NULL,
hpet_msb_inc, NULL);
if (ret != 0) {
RTE_LOG(ERR, EAL, "ERROR: Cannot create HPET timer thread!\n");
diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c
index 2d7a0e9ab2..d3c9de70f8 100644
--- a/lib/eal/windows/eal.c
+++ b/lib/eal/windows/eal.c
@@ -468,7 +468,7 @@ rte_eal_init(int argc, char **argv)
/* Set thread name for aid in debugging. */
snprintf(thread_name, sizeof(thread_name),
- "rte-worker-%d", i);
+ "dpdk-worker-%d", i);
rte_thread_set_name(lcore_config[i].thread_id, thread_name);
ret = rte_thread_set_affinity_by_id(lcore_config[i].thread_id,
diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index f7f93ccdfd..ec5bec020d 100644
--- a/lib/eventdev/rte_event_eth_rx_adapter.c
+++ b/lib/eventdev/rte_event_eth_rx_adapter.c
@@ -1620,7 +1620,7 @@ rxa_create_intr_thread(struct event_eth_rx_adapter *rx_adapter)
rte_spinlock_init(&rx_adapter->intr_ring_lock);
snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN,
- "rx-intr-thread-%d", rx_adapter->id);
+ "dpdk-evt-rx%d", rx_adapter->id);
err = rte_ctrl_thread_create(&rx_adapter->rx_intr_thread, thread_name,
NULL, rxa_intr_thread, rx_adapter);
diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c
index 590720bfa6..76b1677250 100644
--- a/lib/telemetry/telemetry.c
+++ b/lib/telemetry/telemetry.c
@@ -563,7 +563,7 @@ telemetry_legacy_init(void)
return -1;
}
pthread_setaffinity_np(t_old, sizeof(*thread_cpuset), thread_cpuset);
- set_thread_name(t_old, "telemetry-v1");
+ set_thread_name(t_old, "dpdk-telemet-v1");
TMTY_LOG(DEBUG, "Legacy telemetry socket initialized ok\n");
pthread_detach(t_old);
return 0;
@@ -617,7 +617,7 @@ telemetry_v2_init(void)
return -1;
}
pthread_setaffinity_np(t_new, sizeof(*thread_cpuset), thread_cpuset);
- set_thread_name(t_new, "telemetry-v2");
+ set_thread_name(t_new, "dpdk-telemet-v2");
pthread_detach(t_new);
atexit(unlink_sockets);
diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c
index 19a7469e45..906db3871d 100644
--- a/lib/vhost/socket.c
+++ b/lib/vhost/socket.c
@@ -513,7 +513,7 @@ vhost_user_reconnect_init(void)
}
TAILQ_INIT(&reconn_list.head);
- ret = rte_ctrl_thread_create(&reconn_tid, "vhost_reconn", NULL,
+ ret = rte_ctrl_thread_create(&reconn_tid, "dpdk-vhost-reco", NULL,
vhost_user_client_reconnect, NULL);
if (ret != 0) {
VHOST_LOG_CONFIG("thread", ERR, "failed to create reconnect thread\n");
@@ -1239,7 +1239,7 @@ rte_vhost_driver_start(const char *path)
}
int ret = rte_ctrl_thread_create(&fdset_tid,
- "vhost-events", NULL, fdset_event_dispatch,
+ "dpdk-vhost-evts", NULL, fdset_event_dispatch,
&vhost_user.fdset);
if (ret != 0) {
VHOST_LOG_CONFIG(path, ERR, "failed to create fdset handling thread\n");
diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c
index a509daf80c..50dad7022f 100644
--- a/lib/vhost/vduse.c
+++ b/lib/vhost/vduse.c
@@ -455,7 +455,7 @@ vduse_device_create(const char *path)
return -1;
}
- ret = rte_ctrl_thread_create(&fdset_tid, "vduse-events", NULL,
+ ret = rte_ctrl_thread_create(&fdset_tid, "dpdk-vduse-evt", NULL,
fdset_event_dispatch, &vduse.fdset);
if (ret != 0) {
VHOST_LOG_CONFIG(path, ERR, "failed to create vduse fdset handling thread\n");
--
2.41.0
next reply other threads:[~2023-07-03 11:24 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-03 11:23 Thomas Monjalon [this message]
2023-07-03 11:38 ` David Marchand
2023-07-03 11:49 ` Thomas Monjalon
2023-07-17 14:09 ` Bruce Richardson
2023-07-17 16:07 ` Thomas Monjalon
2023-07-17 16:14 ` Bruce Richardson
2023-07-03 12:14 ` [PATCH v2] " Thomas Monjalon
2023-07-04 9:18 ` fengchengwen
2023-07-10 18:42 ` Tyler Retzlaff
2023-08-31 14:37 ` Thomas Monjalon
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=20230703112359.5067-1-thomas@monjalon.net \
--to=thomas@monjalon.net \
--cc=anatoly.burakov@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=bruce.richardson@intel.com \
--cc=chenbo.xia@intel.com \
--cc=ciara.power@intel.com \
--cc=dev@dpdk.org \
--cc=dmitry.kozliuk@gmail.com \
--cc=dmitrym@microsoft.com \
--cc=ed.czeck@atomicrules.com \
--cc=hkalra@marvell.com \
--cc=jerinj@marvell.com \
--cc=john.miller@atomicrules.com \
--cc=matan@nvidia.com \
--cc=maxime.coquelin@redhat.com \
--cc=navasile@linux.microsoft.com \
--cc=orika@nvidia.com \
--cc=pallavi.kadam@intel.com \
--cc=rosen.xu@intel.com \
--cc=s.v.naga.harish.k@intel.com \
--cc=shepard.siegel@atomicrules.com \
--cc=suanmingm@nvidia.com \
--cc=tianfei.zhang@intel.com \
--cc=timothy.mcdaniel@intel.com \
--cc=viacheslavo@nvidia.com \
--cc=xiao.w.wang@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).