qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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

* [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

* 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

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).