* [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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.