From patchwork Fri Oct 9 05:46:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yuanhan Liu X-Patchwork-Id: 7499 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 1DF3A8EA0; Fri, 9 Oct 2015 07:46:23 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id E74B68E8E for ; Fri, 9 Oct 2015 07:46:18 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 08 Oct 2015 22:46:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,657,1437462000"; d="scan'208";a="822889541" Received: from yliu-dev.sh.intel.com ([10.239.66.49]) by fmsmga002.fm.intel.com with ESMTP; 08 Oct 2015 22:46:17 -0700 From: Yuanhan Liu To: dev@dpdk.org Date: Fri, 9 Oct 2015 13:46:08 +0800 Message-Id: <1444369572-1157-10-git-send-email-yuanhan.liu@linux.intel.com> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1444369572-1157-1-git-send-email-yuanhan.liu@linux.intel.com> References: <1444369572-1157-1-git-send-email-yuanhan.liu@linux.intel.com> Cc: "Michael S. Tsirkin" , marcel@redhat.com Subject: [dpdk-dev] [PATCH v6 09/13] 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 fd87f01..3b75d18 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; @@ -244,4 +245,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 b11fd61..d304ee6 100644 --- a/lib/librte_vhost/virtio-net.c +++ b/lib/librte_vhost/virtio-net.c @@ -868,6 +868,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. */