From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id EE4F26AE0 for ; Tue, 7 Jun 2016 05:51:53 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga103.fm.intel.com with ESMTP; 06 Jun 2016 20:51:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,431,1459839600"; d="scan'208";a="992411199" Received: from yliu-dev.sh.intel.com ([10.239.67.162]) by orsmga002.jf.intel.com with ESMTP; 06 Jun 2016 20:51:51 -0700 From: Yuanhan Liu To: dev@dpdk.org Cc: huawei.xie@intel.com, Thomas Monjalon , Panu Matilainen , Traynor Kevin , Rich Lane , Tetsuya Mukawa , Yuanhan Liu Date: Tue, 7 Jun 2016 11:52:08 +0800 Message-Id: <1465271530-27878-19-git-send-email-yuanhan.liu@linux.intel.com> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1465271530-27878-1-git-send-email-yuanhan.liu@linux.intel.com> References: <1463117111-27050-1-git-send-email-yuanhan.liu@linux.intel.com> <1465271530-27878-1-git-send-email-yuanhan.liu@linux.intel.com> Subject: [dpdk-dev] [PATCH v3 18/20] examples/tep_term: adapt to new vhost ABI/API changes X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2016 03:51:54 -0000 Adapt to the new vhost ABI/API refactoring changes, to not break the build. It's a straightforward change: replace "struct virtio_net *dev" with "int fd". Simple build test only so far. Signed-off-by: Yuanhan Liu --- tep_term is built on top of vhost switch example; they shared a lot of code (before the vhost example cleanup). Idealy, we might should move the vxlan part to vhost example, and introduce an option to enable it. However, I found that would take more effort, including the effort of making it co-work with VLAN and VMDq stuff as well as the effort to not break anything, I found it's better to start simple first: just do a new ABI/API adaption. --- examples/tep_termination/main.c | 83 +++++++++++++++++----------------- examples/tep_termination/main.h | 5 +- examples/tep_termination/vxlan_setup.c | 20 ++++---- examples/tep_termination/vxlan_setup.h | 6 +-- 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/examples/tep_termination/main.c b/examples/tep_termination/main.c index b8297dd..32eb925 100644 --- a/examples/tep_termination/main.c +++ b/examples/tep_termination/main.c @@ -566,10 +566,9 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m) struct rte_mbuf **m_table; unsigned len, ret = 0; const uint16_t lcore_id = rte_lcore_id(); - struct virtio_net *dev = vdev->dev; + int vid = vdev->vid; - RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: MAC address is external\n", - dev->device_fh); + RTE_LOG(DEBUG, VHOST_DATA, "(%d) TX: MAC address is external\n", vid); /* Add packet to the port tx queue */ tx_q = &lcore_tx_queue[lcore_id]; @@ -578,8 +577,8 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m) tx_q->m_table[len] = m; len++; if (enable_stats) { - dev_statistics[dev->device_fh].tx_total++; - dev_statistics[dev->device_fh].tx++; + dev_statistics[vid].tx_total++; + dev_statistics[vid].tx++; } if (unlikely(len == MAX_PKT_BURST)) { @@ -614,7 +613,7 @@ static int switch_worker(__rte_unused void *arg) { struct rte_mempool *mbuf_pool = arg; - struct virtio_net *dev = NULL; + int vid; struct vhost_dev *vdev = NULL; struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; struct virtio_net_data_ll *dev_ll; @@ -688,7 +687,7 @@ switch_worker(__rte_unused void *arg) while (dev_ll != NULL) { vdev = dev_ll->vdev; - dev = vdev->dev; + vid = vdev->vid; if (unlikely(vdev->remove)) { dev_ll = dev_ll->next; @@ -709,22 +708,22 @@ switch_worker(__rte_unused void *arg) * must be less than virtio queue size */ if (enable_retry && unlikely(rx_count > - rte_vring_available_entries(dev, VIRTIO_RXQ))) { + rte_vhost_avail_entries(vid, VIRTIO_RXQ))) { for (retry = 0; retry < burst_rx_retry_num; retry++) { rte_delay_us(burst_rx_delay_time); - if (rx_count <= rte_vring_available_entries(dev, VIRTIO_RXQ)) + if (rx_count <= rte_vhost_avail_entries(vid, VIRTIO_RXQ)) break; } } - ret_count = overlay_options.rx_handle(dev, pkts_burst, rx_count); + ret_count = overlay_options.rx_handle(vid, pkts_burst, rx_count); if (enable_stats) { rte_atomic64_add( - &dev_statistics[dev->device_fh].rx_total_atomic, + &dev_statistics[vid].rx_total_atomic, rx_count); rte_atomic64_add( - &dev_statistics[dev->device_fh].rx_atomic, ret_count); + &dev_statistics[vid].rx_atomic, ret_count); } while (likely(rx_count)) { rx_count--; @@ -736,7 +735,7 @@ switch_worker(__rte_unused void *arg) if (likely(!vdev->remove)) { /* Handle guest TX*/ - tx_count = rte_vhost_dequeue_burst(dev, + tx_count = rte_vhost_dequeue_burst(vid, VIRTIO_TXQ, mbuf_pool, pkts_burst, MAX_PKT_BURST); /* If this is the first received packet we need to learn the MAC */ @@ -913,18 +912,24 @@ init_data_ll(void) * loop in the rte_pause loop. */ static void -destroy_device(volatile struct virtio_net *dev) +destroy_device(int vid) { struct virtio_net_data_ll *ll_lcore_dev_cur; struct virtio_net_data_ll *ll_main_dev_cur; struct virtio_net_data_ll *ll_lcore_dev_last = NULL; struct virtio_net_data_ll *ll_main_dev_last = NULL; - struct vhost_dev *vdev; + struct vhost_dev *vdev = NULL; int lcore; - dev->flags &= ~VIRTIO_DEV_RUNNING; - - vdev = (struct vhost_dev *)dev->priv; + ll_main_dev_cur = ll_root_used; + while (ll_main_dev_cur != NULL) { + if (ll_main_dev_cur->vdev->vid == vid) { + vdev = ll_main_dev_cur->vdev; + break; + } + } + if (!vdev) + return; /* set the remove flag. */ vdev->remove = 1; @@ -944,8 +949,7 @@ destroy_device(volatile struct virtio_net *dev) if (ll_lcore_dev_cur == NULL) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Failed to find the dev to be destroy.\n", - dev->device_fh); + "(%d) Failed to find the dev to be destroy.\n", vid); return; } @@ -992,8 +996,8 @@ destroy_device(volatile struct virtio_net *dev) /* Decrement number of device on the lcore. */ lcore_info[vdev->coreid].lcore_ll->device_num--; - RTE_LOG(INFO, VHOST_DATA, "(%"PRIu64") Device has been removed " - "from data core\n", dev->device_fh); + RTE_LOG(INFO, VHOST_DATA, "(%d) Device has been removed " + "from data core\n", vid); rte_free(vdev); @@ -1004,7 +1008,7 @@ destroy_device(volatile struct virtio_net *dev) * to the main linked list and the allocated to a specific data core. */ static int -new_device(struct virtio_net *dev) +new_device(int vid) { struct virtio_net_data_ll *ll_dev; int lcore, core_add = 0; @@ -1014,18 +1018,16 @@ new_device(struct virtio_net *dev) vdev = rte_zmalloc("vhost device", sizeof(*vdev), RTE_CACHE_LINE_SIZE); if (vdev == NULL) { RTE_LOG(INFO, VHOST_DATA, - "(%"PRIu64") Couldn't allocate memory for vhost dev\n", - dev->device_fh); + "(%d) Couldn't allocate memory for vhost dev\n", vid); return -1; } - vdev->dev = dev; - dev->priv = vdev; + vdev->vid = vid; /* Add device to main ll */ ll_dev = get_data_ll_free_entry(&ll_root_free); if (ll_dev == NULL) { - RTE_LOG(INFO, VHOST_DATA, "(%"PRIu64") No free entry found in" + RTE_LOG(INFO, VHOST_DATA, "(%d) No free entry found in" " linked list Device limit of %d devices per core" - " has been reached\n", dev->device_fh, nb_devices); + " has been reached\n", vid, nb_devices); if (vdev->regions_hpa) rte_free(vdev->regions_hpa); rte_free(vdev); @@ -1033,7 +1035,7 @@ new_device(struct virtio_net *dev) } ll_dev->vdev = vdev; add_data_ll_entry(&ll_root_used, ll_dev); - vdev->rx_q = dev->device_fh; + vdev->rx_q = vid; /* reset ready flag */ vdev->ready = DEVICE_MAC_LEARNING; @@ -1050,10 +1052,9 @@ new_device(struct virtio_net *dev) ll_dev = get_data_ll_free_entry(&lcore_info[core_add].lcore_ll->ll_root_free); if (ll_dev == NULL) { RTE_LOG(INFO, VHOST_DATA, - "(%"PRIu64") Failed to add device to data core\n", - dev->device_fh); + "(%d) Failed to add device to data core\n", vid); vdev->ready = DEVICE_SAFE_REMOVE; - destroy_device(dev); + destroy_device(vid); rte_free(vdev->regions_hpa); rte_free(vdev); return -1; @@ -1065,17 +1066,17 @@ new_device(struct virtio_net *dev) ll_dev); /* Initialize device stats */ - memset(&dev_statistics[dev->device_fh], 0, + memset(&dev_statistics[vid], 0, sizeof(struct device_statistics)); /* Disable notifications. */ - rte_vhost_enable_guest_notification(dev, VIRTIO_RXQ, 0); - rte_vhost_enable_guest_notification(dev, VIRTIO_TXQ, 0); + rte_vhost_enable_guest_notification(vid, VIRTIO_RXQ, 0); + rte_vhost_enable_guest_notification(vid, VIRTIO_TXQ, 0); lcore_info[vdev->coreid].lcore_ll->device_num++; - dev->flags |= VIRTIO_DEV_RUNNING; - RTE_LOG(INFO, VHOST_DATA, "(%"PRIu64") Device has been added to data core %d\n", - dev->device_fh, vdev->coreid); + RTE_LOG(INFO, VHOST_DATA, + "(%d) Device has been added to data core %d\n", + vid, vdev->coreid); return 0; } @@ -1113,7 +1114,7 @@ print_stats(void) dev_ll = ll_root_used; while (dev_ll != NULL) { - device_fh = (uint32_t)dev_ll->vdev->dev->device_fh; + device_fh = dev_ll->vdev->vid; tx_total = dev_statistics[device_fh].tx_total; tx = dev_statistics[device_fh].tx; tx_dropped = tx_total - tx; @@ -1257,7 +1258,7 @@ main(int argc, char *argv[]) rte_vhost_feature_disable(1ULL << VIRTIO_NET_F_MRG_RXBUF); /* Register CUSE device to handle IOCTLs. */ - ret = rte_vhost_driver_register((char *)&dev_basename); + ret = rte_vhost_driver_register(dev_basename, 0); if (ret != 0) rte_exit(EXIT_FAILURE, "CUSE device setup failure.\n"); diff --git a/examples/tep_termination/main.h b/examples/tep_termination/main.h index 4b123ab..c0ea766 100644 --- a/examples/tep_termination/main.h +++ b/examples/tep_termination/main.h @@ -71,8 +71,7 @@ struct device_statistics { * Device linked list structure for data path. */ struct vhost_dev { - /**< Pointer to device created by vhost lib. */ - struct virtio_net *dev; + int vid; /**< Number of memory regions for gpa to hpa translation. */ uint32_t nregions_hpa; /**< Memory region information for gpa to hpa translation. */ @@ -116,6 +115,6 @@ struct virtio_net_data_ll { }; uint32_t -virtio_dev_rx(struct virtio_net *dev, struct rte_mbuf **pkts, uint32_t count); +virtio_dev_rx(int vid, struct rte_mbuf **pkts, uint32_t count); #endif /* _MAIN_H_ */ diff --git a/examples/tep_termination/vxlan_setup.c b/examples/tep_termination/vxlan_setup.c index 2a48e14..58bc334 100644 --- a/examples/tep_termination/vxlan_setup.c +++ b/examples/tep_termination/vxlan_setup.c @@ -244,17 +244,17 @@ vxlan_link(struct vhost_dev *vdev, struct rte_mbuf *m) { int i, ret; struct ether_hdr *pkt_hdr; - struct virtio_net *dev = vdev->dev; - uint64_t portid = dev->device_fh; + int vid = vdev->vid; + uint64_t portid = vid; struct ipv4_hdr *ip; struct rte_eth_tunnel_filter_conf tunnel_filter_conf; if (unlikely(portid > VXLAN_N_PORTS)) { RTE_LOG(INFO, VHOST_DATA, - "(%"PRIu64") WARNING: Not configuring device," + "(%d) WARNING: Not configuring device," "as already have %d ports for VXLAN.", - dev->device_fh, VXLAN_N_PORTS); + vid, VXLAN_N_PORTS); return -1; } @@ -262,9 +262,9 @@ vxlan_link(struct vhost_dev *vdev, struct rte_mbuf *m) pkt_hdr = rte_pktmbuf_mtod(m, struct ether_hdr *); if (is_same_ether_addr(&(pkt_hdr->s_addr), &vdev->mac_address)) { RTE_LOG(INFO, VHOST_DATA, - "(%"PRIu64") WARNING: This device is using an existing" + "(%d) WARNING: This device is using an existing" " MAC address and has not been registered.\n", - dev->device_fh); + vid); return -1; } @@ -425,7 +425,7 @@ vxlan_tx_pkts(uint8_t port_id, uint16_t queue_id, /* Check for decapsulation and pass packets directly to VIRTIO device */ int -vxlan_rx_pkts(struct virtio_net *dev, struct rte_mbuf **pkts_burst, +vxlan_rx_pkts(int vid, struct rte_mbuf **pkts_burst, uint32_t rx_count) { uint32_t i = 0; @@ -436,11 +436,11 @@ vxlan_rx_pkts(struct virtio_net *dev, struct rte_mbuf **pkts_burst, for (i = 0; i < rx_count; i++) { if (enable_stats) { rte_atomic64_add( - &dev_statistics[dev->device_fh].rx_bad_ip_csum, + &dev_statistics[vid].rx_bad_ip_csum, (pkts_burst[i]->ol_flags & PKT_RX_IP_CKSUM_BAD) != 0); rte_atomic64_add( - &dev_statistics[dev->device_fh].rx_bad_ip_csum, + &dev_statistics[vid].rx_bad_ip_csum, (pkts_burst[i]->ol_flags & PKT_RX_L4_CKSUM_BAD) != 0); } @@ -452,6 +452,6 @@ vxlan_rx_pkts(struct virtio_net *dev, struct rte_mbuf **pkts_burst, count++; } - ret = rte_vhost_enqueue_burst(dev, VIRTIO_RXQ, pkts_valid, count); + ret = rte_vhost_enqueue_burst(vid, VIRTIO_RXQ, pkts_valid, count); return ret; } diff --git a/examples/tep_termination/vxlan_setup.h b/examples/tep_termination/vxlan_setup.h index 1846540..8d26461 100644 --- a/examples/tep_termination/vxlan_setup.h +++ b/examples/tep_termination/vxlan_setup.h @@ -55,10 +55,10 @@ typedef void (*ol_tunnel_destroy_t)(struct vhost_dev *vdev); typedef int (*ol_tx_handle_t)(uint8_t port_id, uint16_t queue_id, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); -typedef int (*ol_rx_handle_t)(struct virtio_net *dev, struct rte_mbuf **pkts, +typedef int (*ol_rx_handle_t)(int vid, struct rte_mbuf **pkts, uint32_t count); -typedef int (*ol_param_handle)(struct virtio_net *dev); +typedef int (*ol_param_handle)(int vid); struct ol_switch_ops { ol_port_configure_t port_configure; @@ -82,6 +82,6 @@ int vxlan_tx_pkts(uint8_t port_id, uint16_t queue_id, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); int -vxlan_rx_pkts(struct virtio_net *dev, struct rte_mbuf **pkts, uint32_t count); +vxlan_rx_pkts(int vid, struct rte_mbuf **pkts, uint32_t count); #endif /* VXLAN_SETUP_H_ */ -- 1.9.0