* [Qemu-devel] [PATCH v2 0/2 for-2.1] vhost-user fixes @ 2014-07-12 1:42 Nikolay Nikolaev 2014-07-12 1:42 ` [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing Nikolay Nikolaev 2014-07-12 1:43 ` [Qemu-devel] [PATCH v2 2/2 for-2.1] qtest: Adapt vhost-user-test to latehs vhost-user changes Nikolay Nikolaev 0 siblings, 2 replies; 5+ messages in thread From: Nikolay Nikolaev @ 2014-07-12 1:42 UTC (permalink / raw) To: snabb-devel, qemu-devel, mst; +Cc: tech, n.nikolaev The latest vhost-user changes changed the VHOST_SET_MEM_TABLE handling. Now the memory regions are mapped from dev->mem. There is an error when calling qemu_get_ram_fd with reg->guest_phys_addr. The right approach is to find the ram_addr_t corresponding to the userspace_addr using qemu_ram_addr_from_host first. Thanks to Paolo Bonzini for poinitng the real problem. The related vhost-user qtest is also updated to reflect the changes in vhost-user message structures. Changes since v1: - dropped the patches 1 and 2 and just fixed the "real issue" --- Nikolay Nikolaev (2): vhost-user: Fix VHOST_SET_MEM_TABLE processing qtest: Adapt vhost-user-test to latehs vhost-user changes hw/virtio/vhost-user.c | 4 +++- tests/vhost-user-test.c | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) -- Signature ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing 2014-07-12 1:42 [Qemu-devel] [PATCH v2 0/2 for-2.1] vhost-user fixes Nikolay Nikolaev @ 2014-07-12 1:42 ` Nikolay Nikolaev 2014-07-12 5:07 ` Paolo Bonzini 2014-07-12 9:04 ` Nikolay Nikolaev 2014-07-12 1:43 ` [Qemu-devel] [PATCH v2 2/2 for-2.1] qtest: Adapt vhost-user-test to latehs vhost-user changes Nikolay Nikolaev 1 sibling, 2 replies; 5+ messages in thread From: Nikolay Nikolaev @ 2014-07-12 1:42 UTC (permalink / raw) To: snabb-devel, qemu-devel, mst; +Cc: tech, n.nikolaev qemu_get_ram_fd doesn't accept a guest physical address. ram_addr_t are opaque values that are assigned in qemu_ram_alloc. 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. Thanks to Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com> --- hw/virtio/vhost-user.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 38e5806..d610aa4 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -216,7 +216,9 @@ 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; - fd = qemu_get_ram_fd(reg->guest_phys_addr); + ram_addr_t ram_addr; + qemu_ram_addr_from_host((void*)reg->userspace_addr, &ram_addr); + fd = qemu_get_ram_fd(ram_addr); if (fd > 0) { msg.memory.regions[fd_num].userspace_addr = reg->userspace_addr; msg.memory.regions[fd_num].memory_size = reg->memory_size; ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing 2014-07-12 1:42 ` [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing Nikolay Nikolaev @ 2014-07-12 5:07 ` Paolo Bonzini 2014-07-12 9:04 ` Nikolay Nikolaev 1 sibling, 0 replies; 5+ messages in thread From: Paolo Bonzini @ 2014-07-12 5:07 UTC (permalink / raw) To: snabb-devel, qemu-devel, mst; +Cc: tech, n.nikolaev Il 12/07/2014 03:42, Nikolay Nikolaev ha scritto: > qemu_get_ram_fd doesn't accept a guest physical address. ram_addr_t are > opaque values that are assigned in qemu_ram_alloc. > > 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. > > Thanks to Paolo Bonzini <pbonzini@redhat.com> > > Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com> > --- > hw/virtio/vhost-user.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c > index 38e5806..d610aa4 100644 > --- a/hw/virtio/vhost-user.c > +++ b/hw/virtio/vhost-user.c > @@ -216,7 +216,9 @@ 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; > - fd = qemu_get_ram_fd(reg->guest_phys_addr); > + ram_addr_t ram_addr; > + qemu_ram_addr_from_host((void*)reg->userspace_addr, &ram_addr); > + fd = qemu_get_ram_fd(ram_addr); > if (fd > 0) { > msg.memory.regions[fd_num].userspace_addr = reg->userspace_addr; > msg.memory.regions[fd_num].memory_size = reg->memory_size; > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing 2014-07-12 1:42 ` [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing Nikolay Nikolaev 2014-07-12 5:07 ` Paolo Bonzini @ 2014-07-12 9:04 ` Nikolay Nikolaev 1 sibling, 0 replies; 5+ messages in thread From: Nikolay Nikolaev @ 2014-07-12 9:04 UTC (permalink / raw) To: snabb-devel@googlegroups.com, qemu-devel, mst Cc: VirtualOpenSystems Technical Team, Nikolay Nikolaev On Sat, Jul 12, 2014 at 4:42 AM, Nikolay Nikolaev <n.nikolaev@virtualopensystems.com> wrote: > > qemu_get_ram_fd doesn't accept a guest physical address. ram_addr_t are > opaque values that are assigned in qemu_ram_alloc. > > 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. > > Thanks to Paolo Bonzini <pbonzini@redhat.com> > > Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com> > --- > hw/virtio/vhost-user.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c > index 38e5806..d610aa4 100644 > --- a/hw/virtio/vhost-user.c > +++ b/hw/virtio/vhost-user.c > @@ -216,7 +216,9 @@ 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; > - fd = qemu_get_ram_fd(reg->guest_phys_addr); > + ram_addr_t ram_addr; > + qemu_ram_addr_from_host((void*)reg->userspace_addr, &ram_addr); Forgot to checkpatch. Should have space after the void - (void *). Michael, should I resend it? > + fd = qemu_get_ram_fd(ram_addr); > if (fd > 0) { > msg.memory.regions[fd_num].userspace_addr = reg->userspace_addr; > msg.memory.regions[fd_num].memory_size = reg->memory_size; > ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v2 2/2 for-2.1] qtest: Adapt vhost-user-test to latehs vhost-user changes 2014-07-12 1:42 [Qemu-devel] [PATCH v2 0/2 for-2.1] vhost-user fixes Nikolay Nikolaev 2014-07-12 1:42 ` [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing Nikolay Nikolaev @ 2014-07-12 1:43 ` Nikolay Nikolaev 1 sibling, 0 replies; 5+ messages in thread From: Nikolay Nikolaev @ 2014-07-12 1:43 UTC (permalink / raw) To: snabb-devel, qemu-devel, mst; +Cc: tech, n.nikolaev A new field mmap_offset was added in the vhost-user message, we need to reflect this change in the test too. Signed-off-by: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com> --- tests/vhost-user-test.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c index 406ba70..75fedf0 100644 --- a/tests/vhost-user-test.c +++ b/tests/vhost-user-test.c @@ -76,6 +76,7 @@ typedef struct VhostUserMemoryRegion { uint64_t guest_phys_addr; uint64_t memory_size; uint64_t userspace_addr; + uint64_t mmap_offset; } VhostUserMemoryRegion; typedef struct VhostUserMemory { @@ -205,6 +206,7 @@ static void read_guest_mem(void) uint32_t *guest_mem; gint64 end_time; int i, j; + size_t size; g_mutex_lock(data_mutex); @@ -231,8 +233,13 @@ static void read_guest_mem(void) g_assert_cmpint(memory.regions[i].memory_size, >, 1024); - guest_mem = mmap(0, memory.regions[i].memory_size, - PROT_READ | PROT_WRITE, MAP_SHARED, fds[i], 0); + size = memory.regions[i].memory_size + memory.regions[i].mmap_offset; + + guest_mem = mmap(0, size, PROT_READ | PROT_WRITE, + MAP_SHARED, fds[i], 0); + + g_assert(guest_mem != MAP_FAILED); + guest_mem += (memory.regions[i].mmap_offset / sizeof(*guest_mem)); for (j = 0; j < 256; j++) { uint32_t a = readl(memory.regions[i].guest_phys_addr + j*4); ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-07-12 9:05 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-07-12 1:42 [Qemu-devel] [PATCH v2 0/2 for-2.1] vhost-user fixes Nikolay Nikolaev 2014-07-12 1:42 ` [Qemu-devel] [PATCH v2 1/2 for-2.1] vhost-user: Fix VHOST_SET_MEM_TABLE processing Nikolay Nikolaev 2014-07-12 5:07 ` Paolo Bonzini 2014-07-12 9:04 ` Nikolay Nikolaev 2014-07-12 1:43 ` [Qemu-devel] [PATCH v2 2/2 for-2.1] qtest: Adapt vhost-user-test to latehs vhost-user changes Nikolay Nikolaev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).