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 1E70FADEC for ; Mon, 23 Feb 2015 18:35:49 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP; 23 Feb 2015 09:27:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,631,1418112000"; d="scan'208";a="655973843" Received: from sie-lab-214-135.ir.intel.com (HELO silpixa00385231.ir.intel.com) ([10.237.214.135]) by orsmga001.jf.intel.com with ESMTP; 23 Feb 2015 09:35:48 -0800 From: Przemyslaw Czesnowicz To: dev@dpdk.org Date: Mon, 23 Feb 2015 17:36:28 +0000 Message-Id: <1424712993-73818-7-git-send-email-przemyslaw.czesnowicz@intel.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1424712993-73818-1-git-send-email-przemyslaw.czesnowicz@intel.com> References: <1423717649-11818-1-git-send-email-huawei.xie@intel.com> <1424712993-73818-1-git-send-email-przemyslaw.czesnowicz@intel.com> Subject: [dpdk-dev] [PATCH v3 06/11] lib/librte_vhost: make host_memory_map a more generic function. 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: Mon, 23 Feb 2015 17:35:50 -0000 From: "Xie, Huawei" This functions accepts a virtual address and pid(qemu), and maps it into current process(vhost)'s address space. The memory behind the virtual address should be backed by a file, and virtual address should be the starting address. Signed-off-by: Huawei Xie --- lib/librte_vhost/vhost_cuse/virtio-net-cdev.c | 42 +++++++++++++-------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c b/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c index baca379..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,31 +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; } -- 1.9.3