From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 9F8258E8D for ; Fri, 18 Sep 2015 17:09:53 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP; 18 Sep 2015 08:09:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,553,1437462000"; d="scan'208";a="792565945" Received: from yliu-dev.sh.intel.com ([10.239.66.60]) by fmsmga001.fm.intel.com with ESMTP; 18 Sep 2015 08:09:51 -0700 From: Yuanhan Liu To: dev@dpdk.org Date: Fri, 18 Sep 2015 23:10:58 +0800 Message-Id: <1442589061-19225-10-git-send-email-yuanhan.liu@linux.intel.com> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1442589061-19225-1-git-send-email-yuanhan.liu@linux.intel.com> References: <1442589061-19225-1-git-send-email-yuanhan.liu@linux.intel.com> Cc: "Michael S. Tsirkin" Subject: [dpdk-dev] [PATCH v5 resend 09/12] vhost: add API bind a virtq to a specific core 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: Fri, 18 Sep 2015 15:09:54 -0000 From: Changchun Ouyang The new API rte_vhost_core_id_set() is to bind a virtq to a specific core, while the another API rte_vhost_core_id_get() is for getting the bind core for a virtq. The usage, which will be introduced soon, could be find at examles/vhost/main.c. Signed-off-by: Changchun Ouyang Signed-off-by: Yuanhan Liu --- lib/librte_vhost/rte_vhost_version.map | 7 +++++++ lib/librte_vhost/rte_virtio_net.h | 25 +++++++++++++++++++++++++ lib/librte_vhost/virtio-net.c | 25 +++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map index 3d8709e..2ce141c 100644 --- a/lib/librte_vhost/rte_vhost_version.map +++ b/lib/librte_vhost/rte_vhost_version.map @@ -18,5 +18,12 @@ DPDK_2.1 { global: rte_vhost_driver_unregister; +} DPDK_2.0; + + +DPDK_2.2 { + global: + rte_vhost_core_id_get; + rte_vhost_core_id_set; } DPDK_2.0; diff --git a/lib/librte_vhost/rte_virtio_net.h b/lib/librte_vhost/rte_virtio_net.h index 08b69df..7785729 100644 --- a/lib/librte_vhost/rte_virtio_net.h +++ b/lib/librte_vhost/rte_virtio_net.h @@ -90,6 +90,7 @@ struct vhost_virtqueue { int callfd; /**< Used to notify the guest (trigger interrupt). */ int kickfd; /**< Currently unused as polling mode is enabled. */ int enabled; + uint32_t core_id; /**< Data core that the vq is attached to */ struct buf_vector buf_vec[BUF_VECTOR_MAX]; /**< for scatter RX. */ } __rte_cache_aligned; @@ -238,4 +239,28 @@ uint16_t rte_vhost_enqueue_burst(struct virtio_net *dev, uint16_t queue_id, uint16_t rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count); +/** + * This function get the data core id for queue pair in one vhost device. + * @param dev + * virtio-net device + * @param queue_id + * virtio queue index in mq case + * @return + * core id of queue pair of specified virtio device. + */ +uint16_t rte_vhost_core_id_get(volatile struct virtio_net *dev, + uint16_t queue_id); + +/** + * This function set the data core id for queue pair in one vhost device. + * @param dev + * virtio-net device + * @param queue_id + * virtio queue index in mq case + * @param core_id + * data core id for virtio queue pair in mq case + */ +void rte_vhost_core_id_set(struct virtio_net *dev, uint16_t queue_id, + uint16_t core_id); + #endif /* _VIRTIO_NET_H_ */ diff --git a/lib/librte_vhost/virtio-net.c b/lib/librte_vhost/virtio-net.c index 49840b5..33bdacd 100644 --- a/lib/librte_vhost/virtio-net.c +++ b/lib/librte_vhost/virtio-net.c @@ -867,6 +867,31 @@ int rte_vhost_feature_enable(uint64_t feature_mask) return -1; } +uint16_t +rte_vhost_core_id_get(volatile struct virtio_net *dev, uint16_t queue_id) +{ + if (dev == NULL) + return 0; + + if (dev->virtqueue == NULL || dev->virtqueue[queue_id] == NULL) + return 0; + + return dev->virtqueue[queue_id]->core_id; +} + +void +rte_vhost_core_id_set(struct virtio_net *dev, uint16_t queue_id, + uint16_t core_id) +{ + if (dev == NULL) + return; + + if (dev->virtqueue == NULL || dev->virtqueue[queue_id] == NULL) + return; + + dev->virtqueue[queue_id]->core_id = core_id; +} + /* * Register ops so that we can add/remove device to data core. */ -- 1.9.0