From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: matan@mellanox.com, xiao.w.wang@intel.com,
zhihong.wang@intel.com, chenbo.xia@intel.com,
david.marchand@redhat.com, amorenoz@redhat.com,
viacheslavo@mellanox.com, hemant.agrawal@nxp.com,
sachin.saxena@nxp.com, grive@u256.net, dev@dpdk.org
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
Subject: [dpdk-dev] [PATCH v2 07/14] vhost: replace device ID in applications
Date: Wed, 24 Jun 2020 14:26:51 +0200 [thread overview]
Message-ID: <20200624122701.1369327-8-maxime.coquelin@redhat.com> (raw)
In-Reply-To: <20200624122701.1369327-1-maxime.coquelin@redhat.com>
This patch replaces the use of vDPA device ID with
vDPA device pointer. The goals is to remove the vDPA
device ID to avoid condusion with the Vhost ID.
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
examples/vdpa/main.c | 118 +++++++++++++------------
lib/librte_vhost/rte_vdpa.h | 44 ++++++---
lib/librte_vhost/rte_vhost_version.map | 3 +-
lib/librte_vhost/vdpa.c | 64 +++++++-------
4 files changed, 123 insertions(+), 106 deletions(-)
diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c
index 6a719e32d8..54f4940b31 100644
--- a/examples/vdpa/main.c
+++ b/examples/vdpa/main.c
@@ -27,7 +27,7 @@
struct vdpa_port {
char ifname[MAX_PATH_LEN];
- int did;
+ struct rte_vdpa_device *dev;
int vid;
uint64_t flags;
int stats_n;
@@ -105,16 +105,23 @@ static int
new_device(int vid)
{
char ifname[MAX_PATH_LEN];
+ struct rte_device *dev;
int i;
rte_vhost_get_ifname(vid, ifname, sizeof(ifname));
for (i = 0; i < MAX_VDPA_SAMPLE_PORTS; i++) {
- if (strncmp(ifname, vports[i].ifname, MAX_PATH_LEN) == 0) {
- printf("\nnew port %s, did: %d\n",
- ifname, vports[i].did);
- vports[i].vid = vid;
- break;
+ if (strncmp(ifname, vports[i].ifname, MAX_PATH_LEN))
+ continue;
+
+ dev = rte_vdpa_get_rte_device(vports[i].dev);
+ if (!dev) {
+ RTE_LOG(ERR, VDPA,
+ "Failed to get generic device for port %d\n", i);
+ continue;
}
+ printf("\nnew port %s, device : %s\n", ifname, dev->name);
+ vports[i].vid = vid;
+ break;
}
if (i >= MAX_VDPA_SAMPLE_PORTS)
@@ -126,16 +133,24 @@ new_device(int vid)
static void
destroy_device(int vid)
{
+ struct rte_device *dev;
char ifname[MAX_PATH_LEN];
int i;
rte_vhost_get_ifname(vid, ifname, sizeof(ifname));
for (i = 0; i < MAX_VDPA_SAMPLE_PORTS; i++) {
- if (strcmp(ifname, vports[i].ifname) == 0) {
- printf("\ndestroy port %s, did: %d\n",
- ifname, vports[i].did);
- break;
+ if (strncmp(ifname, vports[i].ifname, MAX_PATH_LEN))
+ continue;
+
+ dev = rte_vdpa_get_rte_device(vports[i].dev);
+ if (!dev) {
+ RTE_LOG(ERR, VDPA,
+ "Failed to get generic device for port %d\n", i);
+ continue;
}
+
+ printf("\ndestroy port %s, device: %s\n", ifname, dev->name);
+ break;
}
}
@@ -149,8 +164,6 @@ start_vdpa(struct vdpa_port *vport)
{
int ret;
char *socket_path = vport->ifname;
- struct rte_vdpa_device *vdev;
- int did = vport->did;
if (client_mode)
vport->flags |= RTE_VHOST_USER_CLIENT;
@@ -174,13 +187,7 @@ start_vdpa(struct vdpa_port *vport)
"register driver ops failed: %s\n",
socket_path);
- vdev = rte_vdpa_get_device(did);
- if (!vdev)
- rte_exit(EXIT_FAILURE,
- "vDPA device retrieval failed: %p\n",
- vdev);
-
- ret = rte_vhost_driver_attach_vdpa_device(socket_path, vdev);
+ ret = rte_vhost_driver_attach_vdpa_device(socket_path, vport->dev);
if (ret != 0)
rte_exit(EXIT_FAILURE,
"attach vdpa device failed: %s\n",
@@ -283,35 +290,31 @@ static void cmd_list_vdpa_devices_parsed(
struct cmdline *cl,
__rte_unused void *data)
{
- int did;
uint32_t queue_num;
uint64_t features;
struct rte_vdpa_device *vdev;
struct rte_device *dev;
struct rte_dev_iterator dev_iter;
- cmdline_printf(cl, "device id\tdevice name\tqueue num\tsupported features\n");
+ cmdline_printf(cl, "device name\tqueue num\tsupported features\n");
RTE_DEV_FOREACH(dev, "class=vdpa", &dev_iter) {
- did = rte_vdpa_find_device_id_by_name(dev->name);
- if (did < 0)
- continue;
- vdev = rte_vdpa_get_device(did);
+ vdev = rte_vdpa_find_device_by_name(dev->name);
if (!vdev)
continue;
if (vdev->ops->get_queue_num(vdev, &queue_num) < 0) {
RTE_LOG(ERR, VDPA,
"failed to get vdpa queue number "
- "for device id %d.\n", did);
+ "for device %s.\n", dev->name);
continue;
}
if (vdev->ops->get_features(vdev, &features) < 0) {
RTE_LOG(ERR, VDPA,
"failed to get vdpa features "
- "for device id %d.\n", did);
+ "for device %s.\n", dev->name);
continue;
}
- cmdline_printf(cl, "%d\t\t%s\t\t%" PRIu32 "\t\t0x%" PRIx64 "\n",
- did, dev->name, queue_num, features);
+ cmdline_printf(cl, "%s\t\t%" PRIu32 "\t\t0x%" PRIx64 "\n",
+ dev->name, queue_num, features);
}
}
@@ -339,18 +342,18 @@ static void cmd_create_vdpa_port_parsed(void *parsed_result,
struct cmdline *cl,
__rte_unused void *data)
{
- int did;
+ struct rte_vdpa_device *dev;
struct cmd_create_result *res = parsed_result;
rte_strscpy(vports[devcnt].ifname, res->socket_path, MAX_PATH_LEN);
- did = rte_vdpa_find_device_id_by_name(res->bdf);
- if (did < 0) {
+ dev = rte_vdpa_find_device_by_name(res->bdf);
+ if (dev == NULL) {
cmdline_printf(cl, "Unable to find vdpa device id for %s.\n",
res->bdf);
return;
}
- vports[devcnt].did = did;
+ vports[devcnt].dev = dev;
if (start_vdpa(&vports[devcnt]) == 0)
devcnt++;
@@ -378,7 +381,7 @@ cmdline_parse_inst_t cmd_create_vdpa_port = {
/* *** STATS *** */
struct cmd_stats_result {
cmdline_fixed_string_t stats;
- uint16_t did;
+ cmdline_fixed_string_t bdf;
uint16_t qid;
};
@@ -386,25 +389,24 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl,
__rte_unused void *data)
{
struct cmd_stats_result *res = parsed_result;
- struct rte_vdpa_device *vdev = rte_vdpa_get_device(res->did);
+ struct rte_vdpa_device *vdev = rte_vdpa_find_device_by_name(res->bdf);
struct vdpa_port *vport = NULL;
uint32_t first, last;
int i;
if (!vdev) {
- RTE_LOG(ERR, VDPA, "Invalid device id %" PRIu16 ".\n",
- res->did);
+ RTE_LOG(ERR, VDPA, "Invalid device: %s.\n",
+ res->bdf);
return;
}
for (i = 0; i < RTE_MIN(MAX_VDPA_SAMPLE_PORTS, dev_total); i++) {
- if (vports[i].did == res->did) {
+ if (vports[i].dev == vdev) {
vport = &vports[i];
break;
}
}
if (!vport) {
- RTE_LOG(ERR, VDPA, "Device id %" PRIu16 " was not created.\n",
- res->did);
+ RTE_LOG(ERR, VDPA, "Device %s was not created.\n", res->bdf);
return;
}
if (res->qid == 0xFFFF) {
@@ -412,7 +414,7 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl,
last = rte_vhost_get_vring_num(vport->vid);
if (last == 0) {
RTE_LOG(ERR, VDPA, "Failed to get num of actual virtqs"
- " for device id %d.\n", (int)res->did);
+ " for device %s.\n", res->bdf);
return;
}
last--;
@@ -421,10 +423,10 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl,
last = res->qid;
}
if (!vport->stats_names) {
- vport->stats_n = rte_vdpa_get_stats_names(vport->did, NULL, 0);
+ vport->stats_n = rte_vdpa_get_stats_names(vport->dev, NULL, 0);
if (vport->stats_n <= 0) {
RTE_LOG(ERR, VDPA, "Failed to get names number of "
- "device %d stats.\n", (int)res->did);
+ "device %s stats.\n", res->bdf);
return;
}
vport->stats_names = rte_zmalloc(NULL,
@@ -432,26 +434,26 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl,
vport->stats_n, 0);
if (!vport->stats_names) {
RTE_LOG(ERR, VDPA, "Failed to allocate memory for stat"
- " names of device %d.\n", (int)res->did);
+ " names of device %s.\n", res->bdf);
return;
}
- i = rte_vdpa_get_stats_names(vport->did, vport->stats_names,
+ i = rte_vdpa_get_stats_names(vport->dev, vport->stats_names,
vport->stats_n);
if (vport->stats_n != i) {
- RTE_LOG(ERR, VDPA, "Failed to get names of device %d "
- "stats.\n", (int)res->did);
+ RTE_LOG(ERR, VDPA, "Failed to get names of device %s "
+ "stats.\n", res->bdf);
return;
}
vport->stats = (struct rte_vdpa_stat *)
(vport->stats_names + vport->stats_n);
}
- cmdline_printf(cl, "\nDevice %d:\n", (int)res->did);
+ cmdline_printf(cl, "\nDevice %s:\n", res->bdf);
for (; first <= last; first++) {
memset(vport->stats, 0, sizeof(*vport->stats) * vport->stats_n);
- if (rte_vdpa_get_stats(vport->did, (int)first, vport->stats,
+ if (rte_vdpa_get_stats(vport->dev, (int)first, vport->stats,
vport->stats_n) <= 0) {
RTE_LOG(ERR, VDPA, "Failed to get vdpa queue statistics"
- " for device id %d qid %d.\n", (int)res->did,
+ " for device %s qid %d.\n", res->bdf,
(int)first);
return;
}
@@ -467,8 +469,8 @@ static void cmd_device_stats_parsed(void *parsed_result, struct cmdline *cl,
cmdline_parse_token_string_t cmd_device_stats_ =
TOKEN_STRING_INITIALIZER(struct cmd_stats_result, stats, "stats");
-cmdline_parse_token_num_t cmd_device_id =
- TOKEN_NUM_INITIALIZER(struct cmd_stats_result, did, UINT32);
+cmdline_parse_token_string_t cmd_device_bdf =
+ TOKEN_STRING_INITIALIZER(struct cmd_stats_result, bdf, NULL);
cmdline_parse_token_num_t cmd_queue_id =
TOKEN_NUM_INITIALIZER(struct cmd_stats_result, qid, UINT32);
@@ -478,7 +480,7 @@ cmdline_parse_inst_t cmd_device_stats = {
.help_str = "stats: show device statistics",
.tokens = {
(void *)&cmd_device_stats_,
- (void *)&cmd_device_id,
+ (void *)&cmd_device_bdf,
(void *)&cmd_queue_id,
NULL,
},
@@ -522,9 +524,9 @@ int
main(int argc, char *argv[])
{
char ch;
- int did;
int ret;
struct cmdline *cl;
+ struct rte_vdpa_device *vdev;
struct rte_device *dev;
struct rte_dev_iterator dev_iter;
@@ -553,12 +555,12 @@ main(int argc, char *argv[])
cmdline_stdin_exit(cl);
} else {
RTE_DEV_FOREACH(dev, "class=vdpa", &dev_iter) {
- did = rte_vdpa_find_device_id_by_name(dev->name);
- if (did < 0) {
- rte_panic("Failed to find device id for %s\n",
+ vdev = rte_vdpa_find_device_by_name(dev->name);
+ if (vdev == NULL) {
+ rte_panic("Failed to find vDPA dev for %s\n",
dev->name);
}
- vports[devcnt].did = did;
+ vports[devcnt].dev = vdev;
snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
iface, devcnt);
diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
index 109cf83b8f..549b0a2cb0 100644
--- a/lib/librte_vhost/rte_vdpa.h
+++ b/lib/librte_vhost/rte_vdpa.h
@@ -153,11 +153,26 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *);
* @param name
* the vdpa device name
* @return
- * device id on success, -1 on failure
+ * vDPA device pointer on success, NULL on failure
*/
__rte_experimental
-int
-rte_vdpa_find_device_id_by_name(const char *name);
+struct rte_vdpa_device *
+rte_vdpa_find_device_by_name(const char *name);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Get the generic device from the vdpa device
+ *
+ * @param vdpa_dev
+ * the vdpa device pointer
+ * @return
+ * generic device pointer on success, NULL on failure
+ */
+__rte_experimental
+struct rte_device *
+rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev);
/**
* @warning
@@ -252,8 +267,8 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
* And the array index is same with id field of 'struct rte_vdpa_stat':
* stats[i].id == i
*
- * @param did
- * device id
+ * @param dev
+ * vDPA device pointer
* @param stats_names
* array of at least size elements to be filled.
* If set to NULL, the function returns the required number of elements.
@@ -265,8 +280,9 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
*/
__rte_experimental
int
-rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names,
- unsigned int size);
+rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
+ struct rte_vdpa_stat_name *stats_names,
+ unsigned int size);
/**
* @warning
@@ -280,8 +296,8 @@ rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names,
* And the array index is same with id field of 'struct rte_vdpa_stat':
* stats[i].id == i
*
- * @param did
- * device id
+ * @param dev
+ * vDPA device pointer
* @param qid
* queue id
* @param stats
@@ -295,16 +311,16 @@ rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names,
*/
__rte_experimental
int
-rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_stat *stats,
- unsigned int n);
+rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid,
+ struct rte_vdpa_stat *stats, unsigned int n);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice
*
* Reset statistics of a vDPA device.
*
- * @param did
- * device id
+ * @param dev
+ * vDPA device pointer
* @param qid
* queue id
* @return
@@ -312,5 +328,5 @@ rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_stat *stats,
*/
__rte_experimental
int
-rte_vdpa_reset_stats(int did, uint16_t qid);
+rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid);
#endif /* _RTE_VDPA_H_ */
diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
index 60d67445d7..ba55f6f421 100644
--- a/lib/librte_vhost/rte_vhost_version.map
+++ b/lib/librte_vhost/rte_vhost_version.map
@@ -69,5 +69,6 @@ EXPERIMENTAL {
rte_vhost_get_vhost_ring_inflight;
rte_vhost_get_vring_base_from_inflight;
rte_vhost_slave_config_change;
- rte_vdpa_find_device_id_by_name;
+ rte_vdpa_find_device_by_name;
+ rte_vdpa_get_rte_device;
};
diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c
index ed20082f0f..91bc483774 100644
--- a/lib/librte_vhost/vdpa.c
+++ b/lib/librte_vhost/vdpa.c
@@ -40,14 +40,14 @@ rte_vdpa_find_device_id(struct rte_vdpa_device *dev)
return -1;
}
-int
-rte_vdpa_find_device_id_by_name(const char *name)
+struct rte_vdpa_device *
+rte_vdpa_find_device_by_name(const char *name)
{
struct rte_vdpa_device *dev;
int i;
if (name == NULL)
- return -1;
+ return NULL;
for (i = 0; i < MAX_VHOST_DEVICE; ++i) {
dev = &vdpa_devices[i];
@@ -55,10 +55,19 @@ rte_vdpa_find_device_id_by_name(const char *name)
continue;
if (strcmp(dev->device->name, name) == 0)
- return i;
+ return dev;
}
- return -1;
+ return NULL;
+}
+
+struct rte_device *
+rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev)
+{
+ if (vdpa_dev == NULL)
+ return NULL;
+
+ return vdpa_dev->device;
}
struct rte_vdpa_device *
@@ -228,50 +237,39 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
}
int
-rte_vdpa_get_stats_names(int did, struct rte_vdpa_stat_name *stats_names,
- unsigned int size)
+rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
+ struct rte_vdpa_stat_name *stats_names,
+ unsigned int size)
{
- struct rte_vdpa_device *vdpa_dev;
-
- vdpa_dev = rte_vdpa_get_device(did);
- if (!vdpa_dev)
- return -ENODEV;
+ if (!dev)
+ return -EINVAL;
- RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_stats_names, -ENOTSUP);
+ RTE_FUNC_PTR_OR_ERR_RET(dev->ops->get_stats_names, -ENOTSUP);
- return vdpa_dev->ops->get_stats_names(vdpa_dev, stats_names, size);
+ return dev->ops->get_stats_names(dev, stats_names, size);
}
int
-rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_stat *stats,
- unsigned int n)
+rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid,
+ struct rte_vdpa_stat *stats, unsigned int n)
{
- struct rte_vdpa_device *vdpa_dev;
-
- vdpa_dev = rte_vdpa_get_device(did);
- if (!vdpa_dev)
- return -ENODEV;
-
- if (!stats || !n)
+ if (!dev || !stats || !n)
return -EINVAL;
- RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_stats, -ENOTSUP);
+ RTE_FUNC_PTR_OR_ERR_RET(dev->ops->get_stats, -ENOTSUP);
- return vdpa_dev->ops->get_stats(vdpa_dev, qid, stats, n);
+ return dev->ops->get_stats(dev, qid, stats, n);
}
int
-rte_vdpa_reset_stats(int did, uint16_t qid)
+rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid)
{
- struct rte_vdpa_device *vdpa_dev;
-
- vdpa_dev = rte_vdpa_get_device(did);
- if (!vdpa_dev)
- return -ENODEV;
+ if (!dev)
+ return -EINVAL;
- RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->reset_stats, -ENOTSUP);
+ RTE_FUNC_PTR_OR_ERR_RET(dev->ops->reset_stats, -ENOTSUP);
- return vdpa_dev->ops->reset_stats(vdpa_dev, qid);
+ return dev->ops->reset_stats(dev, qid);
}
static uint16_t
--
2.26.2
next prev parent reply other threads:[~2020-06-24 12:28 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-24 12:26 [dpdk-dev] [PATCH v2 00/14] vDPA API and framework rework Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 01/14] bus/dpaa: fix null pointer dereference Maxime Coquelin
2020-06-26 10:13 ` Adrian Moreno
2020-06-26 10:15 ` Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 02/14] bus/fslmc: " Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 03/14] vhost: introduce vDPA devices class Maxime Coquelin
2020-06-26 10:18 ` Adrian Moreno
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 04/14] vhost: make vDPA framework bus agnostic Maxime Coquelin
2020-06-26 10:30 ` Adrian Moreno
2020-06-26 11:28 ` Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 05/14] vhost: replace device ID in vDPA ops Maxime Coquelin
2020-06-26 10:34 ` Adrian Moreno
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 06/14] vhost: replace vDPA device ID in Vhost Maxime Coquelin
2020-06-26 10:38 ` Adrian Moreno
2020-06-24 12:26 ` Maxime Coquelin [this message]
2020-06-26 10:44 ` [dpdk-dev] [PATCH v2 07/14] vhost: replace device ID in applications Adrian Moreno
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 08/14] vhost: remove useless vDPA API Maxime Coquelin
2020-06-26 10:46 ` Adrian Moreno
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 09/14] vhost: use linked-list for vDPA devices Maxime Coquelin
2020-06-26 11:03 ` Adrian Moreno
2020-06-26 11:20 ` Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 10/12] examples/vdpa: use new wrappers instead of ops Maxime Coquelin
2020-06-24 13:42 ` Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 10/14] vhost: introduce wrappers for some vDPA ops Maxime Coquelin
2020-06-26 11:10 ` Adrian Moreno
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 11/12] examples/vdpa: remove useless device count Maxime Coquelin
2020-06-24 13:42 ` Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 11/14] examples/vdpa: use new wrappers instead of ops Maxime Coquelin
2020-06-26 11:11 ` Adrian Moreno
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 12/14] examples/vdpa: remove useless device count Maxime Coquelin
2020-06-24 12:26 ` [dpdk-dev] [PATCH v2 12/12] vhost: remove vDPA device count API Maxime Coquelin
2020-06-24 13:42 ` Maxime Coquelin
2020-06-24 12:27 ` [dpdk-dev] [PATCH v2 13/14] " Maxime Coquelin
2020-06-26 11:16 ` Adrian Moreno
2020-06-24 12:27 ` [dpdk-dev] [PATCH v2 14/14] vhost: split vDPA header file Maxime Coquelin
2020-06-26 11:19 ` Adrian Moreno
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=20200624122701.1369327-8-maxime.coquelin@redhat.com \
--to=maxime.coquelin@redhat.com \
--cc=amorenoz@redhat.com \
--cc=chenbo.xia@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=grive@u256.net \
--cc=hemant.agrawal@nxp.com \
--cc=matan@mellanox.com \
--cc=sachin.saxena@nxp.com \
--cc=viacheslavo@mellanox.com \
--cc=xiao.w.wang@intel.com \
--cc=zhihong.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).