From patchwork Wed Dec 10 21:37:50 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huawei Xie X-Patchwork-Id: 1929 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 957A18042; Wed, 10 Dec 2014 22:38:31 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 8D31E7F2D for ; Wed, 10 Dec 2014 22:38:29 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP; 10 Dec 2014 13:36:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,553,1413270000"; d="scan'208";a="621818332" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by orsmga001.jf.intel.com with ESMTP; 10 Dec 2014 13:38:27 -0800 Received: from shecgisg003.sh.intel.com (shecgisg003.sh.intel.com [10.239.29.90]) by shvmail01.sh.intel.com with ESMTP id sBALcPJr000881; Thu, 11 Dec 2014 05:38:25 +0800 Received: from shecgisg003.sh.intel.com (localhost [127.0.0.1]) by shecgisg003.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id sBALcNae013989; Thu, 11 Dec 2014 05:38:25 +0800 Received: (from hxie5@localhost) by shecgisg003.sh.intel.com (8.13.6/8.13.6/Submit) id sBALcMkW013985; Thu, 11 Dec 2014 05:38:22 +0800 From: Huawei Xie To: dev@dpdk.org Date: Thu, 11 Dec 2014 05:37:50 +0800 Message-Id: <1418247477-13920-6-git-send-email-huawei.xie@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1418247477-13920-1-git-send-email-huawei.xie@intel.com> References: <1418247477-13920-1-git-send-email-huawei.xie@intel.com> Cc: haifeng.lin@intel.com Subject: [dpdk-dev] [PATCH RFC v2 05/12] lib/librte_vhost: host_memory_map refine 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" host_memory_map only maps partial memory of target process into current process through shared backed file. Signed-off-by: Huawei Xie --- lib/librte_vhost/vhost_cuse/virtio-net-cdev.c | 43 +++++++++++++-------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c b/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c index fbfc403..58ac3dd 100644 --- a/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c +++ b/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c @@ -75,8 +75,8 @@ struct procmap { * map it to our address space. */ static int -host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, - pid_t pid, uint64_t addr) +host_memory_map(pid_t pid, uint64_t addr, + uint64_t *mapped_address, uint64_t *mapped_size) { struct dirent *dptr = NULL; struct procmap procmap; @@ -104,8 +104,8 @@ host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, fmap = fopen(mapfile, "r"); if (fmap == NULL) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Failed to open maps file for pid %d\n", - dev->device_fh, pid); + "Failed to open maps file for pid %d\n", + pid); return -1; } @@ -179,8 +179,8 @@ host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, if (!found) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Failed to find memory file in pid %d maps file\n", - dev->device_fh, pid); + "Failed to find memory file in pid %d maps file\n", + pid); return -1; } @@ -188,8 +188,8 @@ host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, dp = opendir(procdir); if (dp == NULL) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Cannot open pid %d process directory\n", - dev->device_fh, pid); + "Cannot open pid %d process directory\n", + pid); return -1; } @@ -202,8 +202,7 @@ host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, path = realpath(memfile, resolved_path); if ((path == NULL) && (strlen(resolved_path) == 0)) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Failed to resolve fd directory\n", - dev->device_fh); + "Failed to resolve fd directory\n"); closedir(dp); return -1; } @@ -218,8 +217,8 @@ host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, if (found == 0) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Failed to find memory file for pid %d\n", - dev->device_fh, pid); + "Failed to find memory file for pid %d\n", + pid); return -1; } /* Open the shared memory file and map the memory into this process. */ @@ -227,32 +226,30 @@ host_memory_map(struct virtio_net *dev, struct virtio_memory *mem, if (fd == -1) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Failed to open %s for pid %d\n", - dev->device_fh, memfile, pid); + "Failed to open %s for pid %d\n", + memfile, pid); return -1; } map = mmap(0, (size_t)procmap.len, PROT_READ|PROT_WRITE, - MAP_POPULATE|MAP_SHARED, fd, 0); + MAP_POPULATE|MAP_SHARED, fd, 0); close(fd); if (map == MAP_FAILED) { RTE_LOG(ERR, VHOST_CONFIG, - "(%"PRIu64") Error mapping the file %s for pid %d\n", - dev->device_fh, memfile, pid); + "Error mapping the file %s for pid %d\n", + memfile, pid); return -1; } /* Store the memory address and size in the device data structure */ - mem->mapped_address = (uint64_t)(uintptr_t)map; - mem->mapped_size = procmap.len; + *mapped_address = (uint64_t)(uintptr_t)map; + *mapped_size = procmap.len; LOG_DEBUG(VHOST_CONFIG, - "(%"PRIu64") Mem File: %s->%s - Size: %llu - VA: %p\n", - dev->device_fh, + "Mem File: %s->%s - Size: %llu - VA: %p\n", memfile, resolved_path, - (unsigned long long)mem->mapped_size, map); + (unsigned long long)*mapped_size, map); return 0; } -