From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41119) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X5hsH-0002G1-Ng for qemu-devel@nongnu.org; Fri, 11 Jul 2014 16:57:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X5hs8-0004VV-9i for qemu-devel@nongnu.org; Fri, 11 Jul 2014 16:56:57 -0400 Received: from mail-qc0-x22c.google.com ([2607:f8b0:400d:c01::22c]:55604) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X5hs8-0004VC-6T for qemu-devel@nongnu.org; Fri, 11 Jul 2014 16:56:48 -0400 Received: by mail-qc0-f172.google.com with SMTP id l6so1517583qcy.3 for ; Fri, 11 Jul 2014 13:56:47 -0700 (PDT) Sender: Paolo Bonzini Message-ID: <53C04F89.2020202@redhat.com> Date: Fri, 11 Jul 2014 22:56:41 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <20140708140447.7314.87628.stgit@3820> <20140708140601.7314.97988.stgit@3820> In-Reply-To: <20140708140601.7314.97988.stgit@3820> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/3] vhost-user: Fix VHOST_SET_MEM_TABLE processing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: snabb-devel@googlegroups.com, qemu-devel@nongnu.org, mst@redhat.com Cc: tech@virtualopensystems.com, n.nikolaev@virtualopensystems.com Il 08/07/2014 16:06, Nikolay Nikolaev ha scritto: > @@ -216,6 +216,10 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request, > case VHOST_SET_MEM_TABLE: > for (i = 0; i < dev->mem->nregions; ++i) { > struct vhost_memory_region *reg = dev->mem->regions + i; > + if (!qemu_is_ram_block(reg->guest_phys_addr)) { > + /* this is non-RAM region - skip it */ > + continue; > + } > fd = qemu_get_ram_fd(reg->guest_phys_addr); > if (fd > 0) { > msg.memory.regions[fd_num].userspace_addr = reg->userspace_addr; This is wrong. qemu_get_ram_fd doesn't accept a guest physical address. ram_addr_t are opaque values that are assigned in qemu_ram_alloc. In fact, RAM regions are filtered by static bool vhost_section(MemoryRegionSection *section) { return memory_region_is_ram(section->mr); } You can find the ram_addr_t corresponding to the userspace_addr using qemu_ram_addr_from_host, and then call qemu_get_ram_fd on it. Paolo