[RFC 1/3] examples: stop using vhost async datapath

David Marchand david.marchand at redhat.com
Thu Jul 23 17:31:08 CEST 2026


Stop using vhost async as this feature will be removed in a next commit.
The vhost-crypto example was requesting async copy for no identified
reason.

Thanks to this, we can drop use of experimental api in those examples.

Signed-off-by: David Marchand <david.marchand at redhat.com>
---
 examples/vhost/Makefile           |   2 -
 examples/vhost/main.c             | 436 +-----------------------------
 examples/vhost/main.h             |  21 +-
 examples/vhost/meson.build        |   2 -
 examples/vhost_crypto/Makefile    |   1 -
 examples/vhost_crypto/main.c      |   3 +-
 examples/vhost_crypto/meson.build |   1 -
 7 files changed, 13 insertions(+), 453 deletions(-)

diff --git a/examples/vhost/Makefile b/examples/vhost/Makefile
index 5b3cea0778..6e0114d094 100644
--- a/examples/vhost/Makefile
+++ b/examples/vhost/Makefile
@@ -28,8 +28,6 @@ CFLAGS += -O3 $(shell $(PKGCONF) --cflags libdpdk)
 LDFLAGS_SHARED = $(shell $(PKGCONF) --libs libdpdk)
 LDFLAGS_STATIC = $(shell $(PKGCONF) --static --libs libdpdk)
 
-CFLAGS += -DALLOW_EXPERIMENTAL_API
-
 build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
 	$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
 
diff --git a/examples/vhost/main.c b/examples/vhost/main.c
index 5978a50cfe..10a88c46b8 100644
--- a/examples/vhost/main.c
+++ b/examples/vhost/main.c
@@ -2,7 +2,6 @@
  * Copyright(c) 2010-2017 Intel Corporation
  */
 
-#include <ctype.h>
 #include <arpa/inet.h>
 #include <getopt.h>
 #include <linux/if_ether.h>
@@ -26,8 +25,6 @@
 #include <rte_ip.h>
 #include <rte_tcp.h>
 #include <rte_pause.h>
-#include <rte_dmadev.h>
-#include <rte_vhost_async.h>
 #include <rte_thread.h>
 
 #include "main.h"
@@ -62,20 +59,10 @@
 #define TX_DESC_DEFAULT 512
 
 #define INVALID_PORT_ID 0xFF
-#define INVALID_DMA_ID -1
-
-#define DMA_RING_SIZE 4096
-
-#define ASYNC_ENQUEUE_VHOST 1
-#define ASYNC_DEQUEUE_VHOST 2
 
 /* number of mbufs in all pools - if specified on command-line. */
 static int total_num_mbufs = NUM_MBUFS_DEFAULT;
 
-struct dma_for_vhost dma_bind[RTE_MAX_VHOST_DEVICE];
-int16_t dmas_id[RTE_DMADEV_DEFAULT_MAX];
-static int dma_count;
-
 /* mask of enabled ports */
 static uint32_t enabled_port_mask = 0;
 
@@ -211,176 +198,6 @@ struct vhost_bufftable *vhost_txbuff[RTE_MAX_LCORE * RTE_MAX_VHOST_DEVICE];
 #define MBUF_TABLE_DRAIN_TSC	((rte_get_tsc_hz() + US_PER_S - 1) \
 				 / US_PER_S * BURST_TX_DRAIN_US)
 
-static int vid2socketid[RTE_MAX_VHOST_DEVICE];
-
-static inline uint32_t
-get_async_flag_by_socketid(int socketid)
-{
-	return dma_bind[socketid].async_flag;
-}
-
-static inline void
-init_vid2socketid_array(int vid, int socketid)
-{
-	vid2socketid[vid] = socketid;
-}
-
-static inline bool
-is_dma_configured(int16_t dev_id)
-{
-	int i;
-
-	for (i = 0; i < dma_count; i++)
-		if (dmas_id[i] == dev_id)
-			return true;
-	return false;
-}
-
-static inline int
-open_dma(const char *value)
-{
-	struct dma_for_vhost *dma_info = dma_bind;
-	char *input = strndup(value, strlen(value) + 1);
-	char *addrs = input;
-	char *ptrs[2];
-	char *start, *end, *substr;
-	int64_t socketid, vring_id;
-
-	struct rte_dma_info info;
-	struct rte_dma_conf dev_config = { .nb_vchans = 1 };
-	struct rte_dma_vchan_conf qconf = {
-		.direction = RTE_DMA_DIR_MEM_TO_MEM,
-		.nb_desc = DMA_RING_SIZE
-	};
-
-	int dev_id;
-	int ret = 0;
-	uint16_t i = 0;
-	char *dma_arg[RTE_MAX_VHOST_DEVICE];
-	int args_nr;
-
-	if (input == NULL)
-		return -1;
-
-	while (isblank(*addrs))
-		addrs++;
-	if (*addrs == '\0') {
-		ret = -1;
-		goto out;
-	}
-
-	/* process DMA devices within bracket. */
-	addrs++;
-	substr = strtok(addrs, ";]");
-	if (!substr) {
-		ret = -1;
-		goto out;
-	}
-
-	args_nr = rte_strsplit(substr, strlen(substr), dma_arg, RTE_MAX_VHOST_DEVICE, ',');
-	if (args_nr <= 0) {
-		ret = -1;
-		goto out;
-	}
-
-	while (i < args_nr) {
-		char *arg_temp = dma_arg[i];
-		char *txd, *rxd;
-		uint8_t sub_nr;
-		int async_flag;
-
-		sub_nr = rte_strsplit(arg_temp, strlen(arg_temp), ptrs, 2, '@');
-		if (sub_nr != 2) {
-			ret = -1;
-			goto out;
-		}
-
-		txd = strstr(ptrs[0], "txd");
-		rxd = strstr(ptrs[0], "rxd");
-		if (txd) {
-			start = txd;
-			vring_id = VIRTIO_RXQ;
-			async_flag = ASYNC_ENQUEUE_VHOST;
-		} else if (rxd) {
-			start = rxd;
-			vring_id = VIRTIO_TXQ;
-			async_flag = ASYNC_DEQUEUE_VHOST;
-		} else {
-			ret = -1;
-			goto out;
-		}
-
-		start += 3;
-		socketid = strtol(start, &end, 0);
-		if (end == start) {
-			ret = -1;
-			goto out;
-		}
-
-		dev_id = rte_dma_get_dev_id_by_name(ptrs[1]);
-		if (dev_id < 0) {
-			RTE_LOG(ERR, VHOST_CONFIG, "Fail to find DMA %s.\n", ptrs[1]);
-			ret = -1;
-			goto out;
-		}
-
-		/* DMA device is already configured, so skip */
-		if (is_dma_configured(dev_id))
-			goto done;
-
-		if (rte_dma_info_get(dev_id, &info) != 0) {
-			RTE_LOG(ERR, VHOST_CONFIG, "Error with rte_dma_info_get()\n");
-			ret = -1;
-			goto out;
-		}
-
-		if (info.max_vchans < 1) {
-			RTE_LOG(ERR, VHOST_CONFIG, "No channels available on device %d\n", dev_id);
-			ret = -1;
-			goto out;
-		}
-
-		if (rte_dma_configure(dev_id, &dev_config) != 0) {
-			RTE_LOG(ERR, VHOST_CONFIG, "Fail to configure DMA %d.\n", dev_id);
-			ret = -1;
-			goto out;
-		}
-
-		/* Check the max desc supported by DMA device */
-		rte_dma_info_get(dev_id, &info);
-		if (info.nb_vchans != 1) {
-			RTE_LOG(ERR, VHOST_CONFIG, "No configured queues reported by DMA %d.\n",
-					dev_id);
-			ret = -1;
-			goto out;
-		}
-
-		qconf.nb_desc = RTE_MIN(DMA_RING_SIZE, info.max_desc);
-
-		if (rte_dma_vchan_setup(dev_id, 0, &qconf) != 0) {
-			RTE_LOG(ERR, VHOST_CONFIG, "Fail to set up DMA %d.\n", dev_id);
-			ret = -1;
-			goto out;
-		}
-
-		if (rte_dma_start(dev_id) != 0) {
-			RTE_LOG(ERR, VHOST_CONFIG, "Fail to start DMA %u.\n", dev_id);
-			ret = -1;
-			goto out;
-		}
-
-		dmas_id[dma_count++] = dev_id;
-
-done:
-		(dma_info + socketid)->dmas[vring_id].dev_id = dev_id;
-		(dma_info + socketid)->async_flag |= async_flag;
-		i++;
-	}
-out:
-	free(input);
-	return ret;
-}
-
 /*
  * Builds up the correct configuration for VMDQ VLAN pool map
  * according to the pool & queue limits.
@@ -650,7 +467,6 @@ us_vhost_usage(const char *prgname)
 	"		--tx-csum [0|1]: disable/enable TX checksum offload.\n"
 	"		--tso [0|1]: disable/enable TCP segment offload.\n"
 	"		--client: register a vhost-user socket as client mode.\n"
-	"		--dmas: register dma channel for specific vhost device.\n"
 	"		--total-num-mbufs [0-N]: set the number of mbufs to be allocated in mbuf pools, the default value is 147456.\n"
 	"		--builtin-net-driver: enable simple vhost-user net driver\n",
 	       prgname);
@@ -679,8 +495,6 @@ enum {
 	OPT_CLIENT_NUM,
 #define OPT_BUILTIN_NET_DRIVER  "builtin-net-driver"
 	OPT_BUILTIN_NET_DRIVER_NUM,
-#define OPT_DMAS                "dmas"
-	OPT_DMAS_NUM,
 #define OPT_NUM_MBUFS           "total-num-mbufs"
 	OPT_NUM_MBUFS_NUM,
 };
@@ -718,8 +532,6 @@ us_vhost_parse_args(int argc, char **argv)
 				NULL, OPT_CLIENT_NUM},
 		{OPT_BUILTIN_NET_DRIVER, no_argument,
 				NULL, OPT_BUILTIN_NET_DRIVER_NUM},
-		{OPT_DMAS, required_argument,
-				NULL, OPT_DMAS_NUM},
 		{OPT_NUM_MBUFS, required_argument,
 				NULL, OPT_NUM_MBUFS_NUM},
 		{NULL, 0, 0, 0},
@@ -840,15 +652,6 @@ us_vhost_parse_args(int argc, char **argv)
 			}
 			break;
 
-		case OPT_DMAS_NUM:
-			if (open_dma(optarg) == -1) {
-				RTE_LOG(INFO, VHOST_CONFIG,
-					"Wrong DMA args\n");
-				us_vhost_usage(prgname);
-				return -1;
-			}
-			break;
-
 		case OPT_NUM_MBUFS_NUM:
 			ret = parse_num_opt(optarg, INT32_MAX);
 			if (ret == -1) {
@@ -1024,21 +827,7 @@ free_pkts(struct rte_mbuf **pkts, uint16_t n)
 }
 
 static __rte_always_inline void
-complete_async_pkts(struct vhost_dev *vdev)
-{
-	struct rte_mbuf *p_cpl[MAX_PKT_BURST];
-	uint16_t complete_count;
-	int16_t dma_id = dma_bind[vid2socketid[vdev->vid]].dmas[VIRTIO_RXQ].dev_id;
-
-	complete_count = rte_vhost_poll_enqueue_completed(vdev->vid,
-					VIRTIO_RXQ, p_cpl, MAX_PKT_BURST, dma_id, 0);
-	if (complete_count)
-		free_pkts(p_cpl, complete_count);
-
-}
-
-static __rte_always_inline void
-sync_virtio_xmit(struct vhost_dev *dst_vdev, struct vhost_dev *src_vdev,
+virtio_xmit(struct vhost_dev *dst_vdev, struct vhost_dev *src_vdev,
 	    struct rte_mbuf *m)
 {
 	uint16_t ret;
@@ -1076,13 +865,7 @@ drain_vhost(struct vhost_dev *vdev)
 				rte_memory_order_seq_cst);
 	}
 
-	if (!dma_bind[vid2socketid[vdev->vid]].dmas[VIRTIO_RXQ].async_enabled) {
-		free_pkts(m, nr_xmit);
-	} else {
-		uint16_t enqueue_fail = nr_xmit - ret;
-		if (enqueue_fail > 0)
-			free_pkts(&m[ret], enqueue_fail);
-	}
+	free_pkts(m, nr_xmit);
 }
 
 static __rte_always_inline void
@@ -1261,7 +1044,7 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m, uint16_t vlan_tag)
 
 		TAILQ_FOREACH(vdev2, &vhost_dev_list, global_vdev_entry) {
 			if (vdev2 != vdev)
-				sync_virtio_xmit(vdev2, vdev, m);
+				virtio_xmit(vdev2, vdev, m);
 		}
 		goto queue2nic;
 	}
@@ -1354,21 +1137,7 @@ drain_mbuf_table(struct mbuf_table *tx_q)
 }
 
 uint16_t
-async_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
-		struct rte_mbuf **pkts, uint32_t rx_count)
-{
-	uint16_t enqueue_count;
-	uint16_t dma_id = dma_bind[vid2socketid[dev->vid]].dmas[VIRTIO_RXQ].dev_id;
-
-	complete_async_pkts(dev);
-	enqueue_count = rte_vhost_submit_enqueue_burst(dev->vid, queue_id,
-					pkts, rx_count, dma_id, 0);
-
-	return enqueue_count;
-}
-
-uint16_t
-sync_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
+enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
 		struct rte_mbuf **pkts, uint32_t rx_count)
 {
 	return rte_vhost_enqueue_burst(dev->vid, queue_id, pkts, rx_count);
@@ -1408,30 +1177,10 @@ drain_eth_rx(struct vhost_dev *vdev)
 				rte_memory_order_seq_cst);
 	}
 
-	if (!dma_bind[vid2socketid[vdev->vid]].dmas[VIRTIO_RXQ].async_enabled) {
-		free_pkts(pkts, rx_count);
-	} else {
-		uint16_t enqueue_fail = rx_count - enqueue_count;
-		if (enqueue_fail > 0)
-			free_pkts(&pkts[enqueue_count], enqueue_fail);
-	}
-}
-
-uint16_t async_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
-			    struct rte_mempool *mbuf_pool,
-			    struct rte_mbuf **pkts, uint16_t count)
-{
-	int nr_inflight;
-	uint16_t dequeue_count;
-	int16_t dma_id = dma_bind[vid2socketid[dev->vid]].dmas[VIRTIO_TXQ].dev_id;
-
-	dequeue_count = rte_vhost_async_try_dequeue_burst(dev->vid, queue_id,
-			mbuf_pool, pkts, count, &nr_inflight, dma_id, 0);
-
-	return dequeue_count;
+	free_pkts(pkts, rx_count);
 }
 
-uint16_t sync_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
+uint16_t dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
 			   struct rte_mempool *mbuf_pool,
 			   struct rte_mbuf **pkts, uint16_t count)
 {
@@ -1526,45 +1275,6 @@ switch_worker(void *arg)
 	return 0;
 }
 
-static void
-vhost_clear_queue_thread_unsafe(struct vhost_dev *vdev, uint16_t queue_id)
-{
-	uint16_t n_pkt = 0;
-	int pkts_inflight;
-
-	int16_t dma_id = dma_bind[vid2socketid[vdev->vid]].dmas[queue_id].dev_id;
-	pkts_inflight = rte_vhost_async_get_inflight_thread_unsafe(vdev->vid, queue_id);
-
-	struct rte_mbuf *m_cpl[pkts_inflight];
-
-	while (pkts_inflight) {
-		n_pkt = rte_vhost_clear_queue_thread_unsafe(vdev->vid, queue_id, m_cpl,
-							pkts_inflight, dma_id, 0);
-		free_pkts(m_cpl, n_pkt);
-		pkts_inflight = rte_vhost_async_get_inflight_thread_unsafe(vdev->vid,
-									queue_id);
-	}
-}
-
-static void
-vhost_clear_queue(struct vhost_dev *vdev, uint16_t queue_id)
-{
-	uint16_t n_pkt = 0;
-	int pkts_inflight;
-
-	int16_t dma_id = dma_bind[vid2socketid[vdev->vid]].dmas[queue_id].dev_id;
-	pkts_inflight = rte_vhost_async_get_inflight(vdev->vid, queue_id);
-
-	struct rte_mbuf *m_cpl[pkts_inflight];
-
-	while (pkts_inflight) {
-		n_pkt = rte_vhost_clear_queue(vdev->vid, queue_id, m_cpl,
-						pkts_inflight, dma_id, 0);
-		free_pkts(m_cpl, n_pkt);
-		pkts_inflight = rte_vhost_async_get_inflight(vdev->vid, queue_id);
-	}
-}
-
 /*
  * Remove a device from the specific data core linked list and from the
  * main linked list. Synchronization  occurs through the use of the
@@ -1621,37 +1331,9 @@ destroy_device(int vid)
 		"(%d) device has been removed from data core\n",
 		vdev->vid);
 
-	if (dma_bind[vid].dmas[VIRTIO_RXQ].async_enabled) {
-		vhost_clear_queue(vdev, VIRTIO_RXQ);
-		rte_vhost_async_channel_unregister(vid, VIRTIO_RXQ);
-		dma_bind[vid].dmas[VIRTIO_RXQ].async_enabled = false;
-	}
-
-	if (dma_bind[vid].dmas[VIRTIO_TXQ].async_enabled) {
-		vhost_clear_queue(vdev, VIRTIO_TXQ);
-		rte_vhost_async_channel_unregister(vid, VIRTIO_TXQ);
-		dma_bind[vid].dmas[VIRTIO_TXQ].async_enabled = false;
-	}
-
 	rte_free(vdev);
 }
 
-static inline int
-get_socketid_by_vid(int vid)
-{
-	int i;
-	char ifname[PATH_MAX];
-	rte_vhost_get_ifname(vid, ifname, sizeof(ifname));
-
-	for (i = 0; i < nb_sockets; i++) {
-		char *file = socket_files + i * PATH_MAX;
-		if (strcmp(file, ifname) == 0)
-			return i;
-	}
-
-	return -1;
-}
-
 static int
 init_vhost_queue_ops(int vid)
 {
@@ -1659,42 +1341,13 @@ init_vhost_queue_ops(int vid)
 		vdev_queue_ops[vid].enqueue_pkt_burst = builtin_enqueue_pkts;
 		vdev_queue_ops[vid].dequeue_pkt_burst = builtin_dequeue_pkts;
 	} else {
-		if (dma_bind[vid2socketid[vid]].dmas[VIRTIO_RXQ].async_enabled)
-			vdev_queue_ops[vid].enqueue_pkt_burst = async_enqueue_pkts;
-		else
-			vdev_queue_ops[vid].enqueue_pkt_burst = sync_enqueue_pkts;
-
-		if (dma_bind[vid2socketid[vid]].dmas[VIRTIO_TXQ].async_enabled)
-			vdev_queue_ops[vid].dequeue_pkt_burst = async_dequeue_pkts;
-		else
-			vdev_queue_ops[vid].dequeue_pkt_burst = sync_dequeue_pkts;
+		vdev_queue_ops[vid].enqueue_pkt_burst = enqueue_pkts;
+		vdev_queue_ops[vid].dequeue_pkt_burst = dequeue_pkts;
 	}
 
 	return 0;
 }
 
-static inline int
-vhost_async_channel_register(int vid)
-{
-	int rx_ret = 0, tx_ret = 0;
-
-	if (dma_bind[vid2socketid[vid]].dmas[VIRTIO_RXQ].dev_id != INVALID_DMA_ID) {
-		rx_ret = rte_vhost_async_channel_register(vid, VIRTIO_RXQ);
-		if (rx_ret == 0)
-			dma_bind[vid2socketid[vid]].dmas[VIRTIO_RXQ].async_enabled = true;
-	}
-
-	if (dma_bind[vid2socketid[vid]].dmas[VIRTIO_TXQ].dev_id != INVALID_DMA_ID) {
-		tx_ret = rte_vhost_async_channel_register(vid, VIRTIO_TXQ);
-		if (tx_ret == 0)
-			dma_bind[vid2socketid[vid]].dmas[VIRTIO_TXQ].async_enabled = true;
-	}
-
-	return rx_ret | tx_ret;
-}
-
-
-
 /*
  * A new device is added to a data core. First the device is added to the main linked list
  * and then allocated to a specific data core.
@@ -1706,7 +1359,6 @@ new_device(int vid)
 	uint16_t i;
 	uint32_t device_num_min = num_devices;
 	struct vhost_dev *vdev;
-	int ret;
 
 	vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE);
 	if (vdev == NULL) {
@@ -1730,14 +1382,6 @@ new_device(int vid)
 		}
 	}
 
-	int socketid = get_socketid_by_vid(vid);
-	if (socketid == -1)
-		return -1;
-
-	init_vid2socketid_array(vid, socketid);
-
-	ret =  vhost_async_channel_register(vid);
-
 	if (init_vhost_queue_ops(vid) != 0)
 		return -1;
 
@@ -1772,26 +1416,6 @@ new_device(int vid)
 		"(%d) device has been added to data core %d\n",
 		vid, vdev->coreid);
 
-	return ret;
-}
-
-static int
-vring_state_changed(int vid, uint16_t queue_id, int enable)
-{
-	struct vhost_dev *vdev = NULL;
-
-	TAILQ_FOREACH(vdev, &vhost_dev_list, global_vdev_entry) {
-		if (vdev->vid == vid)
-			break;
-	}
-	if (!vdev)
-		return -1;
-
-	if (dma_bind[vid2socketid[vid]].dmas[queue_id].async_enabled) {
-		if (!enable)
-			vhost_clear_queue_thread_unsafe(vdev, queue_id);
-	}
-
 	return 0;
 }
 
@@ -1803,7 +1427,6 @@ static const struct rte_vhost_device_ops virtio_net_device_ops =
 {
 	.new_device =  new_device,
 	.destroy_device = destroy_device,
-	.vring_state_changed = vring_state_changed,
 };
 
 /*
@@ -1882,24 +1505,6 @@ sigint_handler(__rte_unused int signum)
 	exit(0);
 }
 
-static void
-reset_dma(void)
-{
-	int i;
-
-	for (i = 0; i < RTE_MAX_VHOST_DEVICE; i++) {
-		int j;
-
-		for (j = 0; j < RTE_MAX_QUEUES_PER_PORT * 2; j++) {
-			dma_bind[i].dmas[j].dev_id = INVALID_DMA_ID;
-			dma_bind[i].dmas[j].async_enabled = false;
-		}
-	}
-
-	for (i = 0; i < RTE_DMADEV_DEFAULT_MAX; i++)
-		dmas_id[i] = INVALID_DMA_ID;
-}
-
 /*
  * Main function, does initialisation and calls the per-lcore functions.
  */
@@ -1909,7 +1514,7 @@ main(int argc, char *argv[])
 	struct rte_mempool *mbuf_pool = NULL;
 	unsigned lcore_id, core_id = 0;
 	unsigned nb_ports, valid_num_ports;
-	int ret, i;
+	int ret;
 	uint16_t portid;
 	rte_thread_t tid;
 	uint64_t flags = RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS;
@@ -1923,9 +1528,6 @@ main(int argc, char *argv[])
 	argc -= ret;
 	argv += ret;
 
-	/* initialize dma structures */
-	reset_dma();
-
 	/* parse app arguments */
 	ret = us_vhost_parse_args(argc, argv);
 	if (ret < 0)
@@ -2004,20 +1606,10 @@ main(int argc, char *argv[])
 	if (client_mode)
 		flags |= RTE_VHOST_USER_CLIENT;
 
-	for (i = 0; i < dma_count; i++) {
-		if (rte_vhost_async_dma_configure(dmas_id[i], 0) < 0) {
-			RTE_LOG(ERR, VHOST_PORT, "Failed to configure DMA in vhost.\n");
-			rte_exit(EXIT_FAILURE, "Cannot use given DMA device\n");
-		}
-	}
-
 	/* Register vhost user driver to handle vhost messages. */
-	for (i = 0; i < nb_sockets; i++) {
+	for (int i = 0; i < nb_sockets; i++) {
 		char *file = socket_files + i * PATH_MAX;
 
-		if (dma_count && get_async_flag_by_socketid(i) != 0)
-			flags = flags | RTE_VHOST_USER_ASYNC_COPY;
-
 		ret = rte_vhost_driver_register(file, flags);
 		if (ret != 0) {
 			unregister_drivers(i);
@@ -2070,14 +1662,6 @@ main(int argc, char *argv[])
 	RTE_LCORE_FOREACH_WORKER(lcore_id)
 		rte_eal_wait_lcore(lcore_id);
 
-	for (i = 0; i < dma_count; i++) {
-		if (rte_vhost_async_dma_unconfigure(dmas_id[i], 0) < 0) {
-			RTE_LOG(ERR, VHOST_PORT,
-				"Failed to unconfigure DMA %d in vhost.\n", dmas_id[i]);
-			rte_exit(EXIT_FAILURE, "Cannot use given DMA device\n");
-		}
-	}
-
 	/* clean up the EAL */
 	rte_eal_cleanup();
 
diff --git a/examples/vhost/main.h b/examples/vhost/main.h
index c986cbc5a9..3cf6bd7f07 100644
--- a/examples/vhost/main.h
+++ b/examples/vhost/main.h
@@ -8,7 +8,6 @@
 #include <sys/queue.h>
 
 #include <rte_ether.h>
-#include <rte_pci.h>
 
 /* Macros for printing using RTE_LOG */
 #define RTE_LOGTYPE_VHOST_CONFIG RTE_LOGTYPE_USER1
@@ -92,17 +91,6 @@ struct lcore_info {
 	struct vhost_dev_tailq_list vdev_list;
 };
 
-struct dma_info {
-	struct rte_pci_addr addr;
-	int16_t dev_id;
-	bool async_enabled;
-};
-
-struct dma_for_vhost {
-	struct dma_info dmas[RTE_MAX_QUEUES_PER_PORT * 2];
-	uint32_t async_flag;
-};
-
 /* we implement non-extra virtio net features */
 #define VIRTIO_NET_FEATURES	0
 
@@ -116,14 +104,9 @@ uint16_t builtin_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
 uint16_t builtin_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
 			struct rte_mempool *mbuf_pool,
 			struct rte_mbuf **pkts, uint16_t count);
-uint16_t sync_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
-			 struct rte_mbuf **pkts, uint32_t count);
-uint16_t sync_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
-			struct rte_mempool *mbuf_pool,
-			struct rte_mbuf **pkts, uint16_t count);
-uint16_t async_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
+uint16_t enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id,
 			 struct rte_mbuf **pkts, uint32_t count);
-uint16_t async_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
+uint16_t dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id,
 			struct rte_mempool *mbuf_pool,
 			struct rte_mbuf **pkts, uint16_t count);
 #endif /* _MAIN_H_ */
diff --git a/examples/vhost/meson.build b/examples/vhost/meson.build
index e938be8f45..a04852bb2f 100644
--- a/examples/vhost/meson.build
+++ b/examples/vhost/meson.build
@@ -12,8 +12,6 @@ if not is_linux
 endif
 
 deps += 'vhost'
-deps += 'dmadev'
-allow_experimental_apis = true
 sources = files(
         'main.c',
         'virtio_net.c',
diff --git a/examples/vhost_crypto/Makefile b/examples/vhost_crypto/Makefile
index cc7f2abb90..130953c38e 100644
--- a/examples/vhost_crypto/Makefile
+++ b/examples/vhost_crypto/Makefile
@@ -6,7 +6,6 @@ APP = vhost-crypto
 
 # all source are stored in SRCS-y
 SRCS-y := main.c
-CFLAGS += -DALLOW_EXPERIMENTAL_API
 
 PKGCONF ?= pkg-config
 
diff --git a/examples/vhost_crypto/main.c b/examples/vhost_crypto/main.c
index 8bdfc40c4b..e196221548 100644
--- a/examples/vhost_crypto/main.c
+++ b/examples/vhost_crypto/main.c
@@ -622,8 +622,7 @@ main(int argc, char *argv[])
 		}
 
 		for (j = 0; j < lo->nb_sockets; j++) {
-			ret = rte_vhost_driver_register(lo->socket_files[j],
-				RTE_VHOST_USER_ASYNC_COPY);
+			ret = rte_vhost_driver_register(lo->socket_files[j], 0);
 			if (ret < 0) {
 				RTE_LOG(ERR, USER1, "socket %s already exists\n",
 					lo->socket_files[j]);
diff --git a/examples/vhost_crypto/meson.build b/examples/vhost_crypto/meson.build
index 1c294c286f..47c8fa829f 100644
--- a/examples/vhost_crypto/meson.build
+++ b/examples/vhost_crypto/meson.build
@@ -6,7 +6,6 @@
 # To build this example as a standalone application with an already-installed
 # DPDK instance, use 'make'
 
-allow_experimental_apis = true
 deps += ['vhost', 'cryptodev']
 sources = files(
         'main.c',
-- 
2.54.0



More information about the dev mailing list