apps: use helper to create mbuf pools
[dpdk.git] / examples / vhost / main.c
index a397eae..22d6a4b 100644 (file)
@@ -67,7 +67,7 @@
                                                        (num_switching_cores*MBUF_CACHE_SIZE))
 
 #define MBUF_CACHE_SIZE 128
-#define MBUF_SIZE (2048 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
+#define MBUF_DATA_SIZE (2048 + RTE_PKTMBUF_HEADROOM)
 
 /*
  * No frame data buffer allocated from host are required for zero copy
@@ -75,8 +75,7 @@
  * directly use it.
  */
 #define VIRTIO_DESCRIPTOR_LEN_ZCP 1518
-#define MBUF_SIZE_ZCP (VIRTIO_DESCRIPTOR_LEN_ZCP + sizeof(struct rte_mbuf) \
-       + RTE_PKTMBUF_HEADROOM)
+#define MBUF_DATA_SIZE_ZCP (VIRTIO_DESCRIPTOR_LEN_ZCP + RTE_PKTMBUF_HEADROOM)
 #define MBUF_CACHE_SIZE_ZCP 0
 
 #define MAX_PKT_BURST 32               /* Max burst size for RX/TX */
 /* Number of descriptors per cacheline. */
 #define DESC_PER_CACHELINE (RTE_CACHE_LINE_SIZE / sizeof(struct vring_desc))
 
+#define MBUF_EXT_MEM(mb)   (RTE_MBUF_FROM_BADDR((mb)->buf_addr) != (mb))
+
 /* mask of enabled ports */
 static uint32_t enabled_port_mask = 0;
 
@@ -745,19 +746,6 @@ us_vhost_parse_args(int argc, char **argv)
                                        return -1;
                                } else
                                        zero_copy = ret;
-
-                               if (zero_copy) {
-#ifdef RTE_MBUF_REFCNT
-                                       RTE_LOG(ERR, VHOST_CONFIG, "Before running "
-                                       "zero copy vhost APP, please "
-                                       "disable RTE_MBUF_REFCNT\n"
-                                       "in config file and then rebuild DPDK "
-                                       "core lib!\n"
-                                       "Otherwise please disable zero copy "
-                                       "flag in command line!\n");
-                                       return -1;
-#endif
-                               }
                        }
 
                        /* Specify the descriptor number on RX. */
@@ -1445,7 +1433,7 @@ put_desc_to_used_list_zcp(struct vhost_virtqueue *vq, uint16_t desc_idx)
 
        /* Kick the guest if necessary. */
        if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT))
-               eventfd_write((int)vq->kickfd, 1);
+               eventfd_write((int)vq->callfd, 1);
 }
 
 /*
@@ -1601,7 +1589,7 @@ txmbuf_clean_zcp(struct virtio_net *dev, struct vpool *vpool)
 
        for (index = 0; index < mbuf_count; index++) {
                mbuf = __rte_mbuf_raw_alloc(vpool->pool);
-               if (likely(RTE_MBUF_INDIRECT(mbuf)))
+               if (likely(MBUF_EXT_MEM(mbuf)))
                        pktmbuf_detach_zcp(mbuf);
                rte_ring_sp_enqueue(vpool->ring, mbuf);
 
@@ -1638,7 +1626,7 @@ txmbuf_clean_zcp(struct virtio_net *dev, struct vpool *vpool)
 
        /* Kick guest if required. */
        if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT))
-               eventfd_write((int)vq->kickfd, 1);
+               eventfd_write((int)vq->callfd, 1);
 
        return 0;
 }
@@ -1664,7 +1652,7 @@ static void mbuf_destroy_zcp(struct vpool *vpool)
        for (index = 0; index < mbuf_count; index++) {
                mbuf = __rte_mbuf_raw_alloc(vpool->pool);
                if (likely(mbuf != NULL)) {
-                       if (likely(RTE_MBUF_INDIRECT(mbuf)))
+                       if (likely(MBUF_EXT_MEM(mbuf)))
                                pktmbuf_detach_zcp(mbuf);
                        rte_ring_sp_enqueue(vpool->ring, (void *)mbuf);
                }
@@ -1786,7 +1774,7 @@ virtio_dev_rx_zcp(struct virtio_net *dev, struct rte_mbuf **pkts,
 
        /* Kick the guest if necessary. */
        if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT))
-               eventfd_write((int)vq->kickfd, 1);
+               eventfd_write((int)vq->callfd, 1);
 
        return count;
 }
@@ -2626,9 +2614,10 @@ new_device (struct virtio_net *dev)
 
                }
 
-               vdev->regions_hpa = (struct virtio_memory_regions_hpa *) rte_zmalloc("vhost hpa region",
-                       sizeof(struct virtio_memory_regions_hpa) * vdev->nregions_hpa,
-                       RTE_CACHE_LINE_SIZE);
+               vdev->regions_hpa = rte_calloc("vhost hpa region",
+                                              vdev->nregions_hpa,
+                                              sizeof(struct virtio_memory_regions_hpa),
+                                              RTE_CACHE_LINE_SIZE);
                if (vdev->regions_hpa == NULL) {
                        RTE_LOG(ERR, VHOST_CONFIG, "Cannot allocate memory for hpa region\n");
                        rte_free(vdev);
@@ -2757,8 +2746,7 @@ new_device (struct virtio_net *dev)
                RTE_LOG(INFO, VHOST_DATA, "(%"PRIu64") Failed to add device to data core\n", dev->device_fh);
                vdev->ready = DEVICE_SAFE_REMOVE;
                destroy_device(dev);
-               if (vdev->regions_hpa)
-                       rte_free(vdev->regions_hpa);
+               rte_free(vdev->regions_hpa);
                rte_free(vdev);
                return -1;
        }
@@ -2855,12 +2843,8 @@ static void
 setup_mempool_tbl(int socket, uint32_t index, char *pool_name,
        char *ring_name, uint32_t nb_mbuf)
 {
-       uint16_t roomsize = VIRTIO_DESCRIPTOR_LEN_ZCP + RTE_PKTMBUF_HEADROOM;
-       vpool_array[index].pool
-               = rte_mempool_create(pool_name, nb_mbuf, MBUF_SIZE_ZCP,
-               MBUF_CACHE_SIZE_ZCP, sizeof(struct rte_pktmbuf_pool_private),
-               rte_pktmbuf_pool_init, (void *)(uintptr_t)roomsize,
-               rte_pktmbuf_init, NULL, socket, 0);
+       vpool_array[index].pool = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
+               MBUF_CACHE_SIZE_ZCP, 0, MBUF_DATA_SIZE_ZCP, socket);
        if (vpool_array[index].pool != NULL) {
                vpool_array[index].ring
                        = rte_ring_create(ring_name,
@@ -2881,7 +2865,7 @@ setup_mempool_tbl(int socket, uint32_t index, char *pool_name,
                }
 
                /* Need consider head room. */
-               vpool_array[index].buf_size = roomsize - RTE_PKTMBUF_HEADROOM;
+               vpool_array[index].buf_size = VIRTIO_DESCRIPTOR_LEN_ZCP;
        } else {
                rte_exit(EXIT_FAILURE, "mempool_create(%s) failed", pool_name);
        }
@@ -2944,15 +2928,9 @@ main(int argc, char *argv[])
 
        if (zero_copy == 0) {
                /* Create the mbuf pool. */
-               mbuf_pool = rte_mempool_create(
-                               "MBUF_POOL",
-                               NUM_MBUFS_PER_PORT
-                               * valid_num_ports,
-                               MBUF_SIZE, MBUF_CACHE_SIZE,
-                               sizeof(struct rte_pktmbuf_pool_private),
-                               rte_pktmbuf_pool_init, NULL,
-                               rte_pktmbuf_init, NULL,
-                               rte_socket_id(), 0);
+               mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL",
+                       NUM_MBUFS_PER_PORT * valid_num_ports, MBUF_CACHE_SIZE,
+                       0, MBUF_DATA_SIZE, rte_socket_id());
                if (mbuf_pool == NULL)
                        rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");