[Qemu-devel] Fwd: Re: the userspace process vapp mmap filed // [PULL 13/37] vhost-user: fix regions provied with VHOST_USER_SET_MEM_TABLE message

2014-09-09 Thread linhafieng



 Forwarded Message 
Subject: Re: the userspace process vapp mmap filed //[Qemu-devel] [PULL 13/37] 
vhost-user: fix regions provied with VHOST_USER_SET_MEM_TABLE message
Date: Tue, 09 Sep 2014 19:45:08 +0800
From: linhafieng 
To: Michael S. Tsirkin 
CC: n.nikol...@virtualopensystems.com, jerry.lili...@huawei.com, 
qemu-devel@nongnu.org, pbonz...@redhat.com, damar...@cisco.com, 
t...@virtualopensystems.com

On 2014/9/3 15:08, Michael S. Tsirkin wrote:
> On Wed, Sep 03, 2014 at 02:26:03PM +0800, linhafieng wrote:
>> I run the user process vapp to test the  VHOST_USER_SET_MEM_TABLE message 
>> found that the user sapce failed to mmap.
> 
> Why off-list?
> pls copy qemu mailing list and pbonz...@redhat.com
> 
> 


I wrote a patch for the vapp to test the patch of broken mem regions.The vapp 
can receive data from VM but there is a mmap failed error.

i have some qeusions about the patch and vhost-user:
1.can i mmap all the fd of the mem regions? why some region failed?Have any 
impact on it?
2.the vapp why not update with the path of broken mem regions?
3.is the test program of vhost user test vring mem more meaningful?
4.the port of switch how to find the vhost-user device?by the socket path?
5.should the process of vhost-user manage all vhost-user backend socket fd? or 
any better advise?


my patch is for vapp is :

diff -uNr vapp/vhost_server.c vapp-for-broken-mem-region//vhost_server.c
--- vapp/vhost_server.c 2014-08-30 09:39:20.0 +
+++ vapp-for-broken-mem-region//vhost_server.c  2014-09-09 11:36:50.0 
+
@@ -147,18 +147,22 @@

 for (idx = 0; idx < msg->msg.memory.nregions; idx++) {
 if (msg->fds[idx] > 0) {
+size_t size;
+uint64_t *guest_mem;
 VhostServerMemoryRegion *region = 
&vhost_server->memory.regions[idx];

 region->guest_phys_addr = 
msg->msg.memory.regions[idx].guest_phys_addr;
 region->memory_size = msg->msg.memory.regions[idx].memory_size;
 region->userspace_addr = 
msg->msg.memory.regions[idx].userspace_addr;
-
+region->mmap_offset = msg->msg.memory.regions[idx].mmap_offset;
+
 assert(idx < msg->fd_num);
 assert(msg->fds[idx] > 0);

-region->mmap_addr =
-(uintptr_t) init_shm_from_fd(msg->fds[idx], 
region->memory_size);
-
+size = region->memory_size + region->mmap_offset;
+guest_mem = init_shm_from_fd(msg->fds[idx], size);
+guest_mem += (region->mmap_offset / sizeof(*guest_mem));
+region->mmap_addr = (uint64_t)guest_mem;
 vhost_server->memory.nregions++;
 }
 }
diff -uNr vapp/vhost_server.h vapp-for-broken-mem-region//vhost_server.h
--- vapp/vhost_server.h 2014-08-30 09:39:20.0 +
+++ vapp-for-broken-mem-region//vhost_server.h  2014-09-05 01:41:27.0 
+
@@ -13,7 +13,9 @@
 uint64_t guest_phys_addr;
 uint64_t memory_size;
 uint64_t userspace_addr;
+   uint64_t mmap_offset;
 uint64_t mmap_addr;
+
 } VhostServerMemoryRegion;

 typedef struct VhostServerMemory {
diff -uNr vapp/vhost_user.h vapp-for-broken-mem-region//vhost_user.h
--- vapp/vhost_user.h   2014-08-30 09:39:20.0 +
+++ vapp-for-broken-mem-region//vhost_user.h2014-09-05 01:40:20.0 
+
@@ -13,6 +13,7 @@
 uint64_t guest_phys_addr;
 uint64_t memory_size;
 uint64_t userspace_addr;
+   uint64_t mmap_offset;
 } VhostUserMemoryRegion;

 typedef struct VhostUserMemory {


the result of the vapp with my patch :

Processing message: VHOST_USER_SET_OWNER
_set_owner
Cmd: VHOST_USER_GET_FEATURES (0x1)
Flags: 0x1
u64: 0x0

Processing message: VHOST_USER_GET_FEATURES
_get_features
Cmd: VHOST_USER_SET_VRING_CALL (0xd)
Flags: 0x1
u64: 0x0

Processing message: VHOST_USER_SET_VRING_CALL
_set_vring_call
Got callfd 0x5
Cmd: VHOST_USER_SET_VRING_CALL (0xd)
Flags: 0x1
u64: 0x1

Processing message: VHOST_USER_SET_VRING_CALL
_set_vring_call
Got callfd 0x6
Cmd: VHOST_USER_SET_FEATURES (0x2)
Flags: 0x1
u64: 0x0

Processing message: VHOST_USER_SET_FEATURES
_set_features
Cmd: VHOST_USER_SET_MEM_TABLE (0x5)
Flags: 0x1
nregions: 2
region:
gpa = 0x0
size = 655360
ua = 0x7f76c000 [0]
region:
gpa = 0xC
size = 2146697216
ua = 0x7f76c00c [1]

Processing message: VHOST_USER_SET_MEM_TABL

Re: [Qemu-devel] the userspace process vapp mmap filed // [PULL 13/37] vhost-user: fix regions provied with VHOST_USER_SET_MEM_TABLE message

2014-09-09 Thread linhafieng
On 2014/9/3 15:08, Michael S. Tsirkin wrote:
> On Wed, Sep 03, 2014 at 02:26:03PM +0800, linhafieng wrote:
>> I run the user process vapp to test the  VHOST_USER_SET_MEM_TABLE message 
>> found that the user sapce failed to mmap.
> 
> Why off-list?
> pls copy qemu mailing list and pbonz...@redhat.com
> 
> 


I wrote a patch for the vapp to test the patch of broken mem regions.The vapp 
can receive data from VM but there is a mmap failed error.

i have some qeusions about the patch and vhost-user:
1.can i mmap all the fd of the mem regions? why some region failed?Have any 
impact on it?
2.the vapp why not update with the path of broken mem regions?
3.is the test program of vhost user test vring mem more meaningful?
4.the port of switch how to find the vhost-user device?by the socket path?
5.should the process of vhost-user manage all vhost-user backend socket fd? or 
any better advise?


my patch is for vapp is :

diff -uNr vapp/vhost_server.c vapp-for-broken-mem-region//vhost_server.c
--- vapp/vhost_server.c 2014-08-30 09:39:20.0 +
+++ vapp-for-broken-mem-region//vhost_server.c  2014-09-09 11:36:50.0 
+
@@ -147,18 +147,22 @@

 for (idx = 0; idx < msg->msg.memory.nregions; idx++) {
 if (msg->fds[idx] > 0) {
+size_t size;
+uint64_t *guest_mem;
 VhostServerMemoryRegion *region = 
&vhost_server->memory.regions[idx];

 region->guest_phys_addr = 
msg->msg.memory.regions[idx].guest_phys_addr;
 region->memory_size = msg->msg.memory.regions[idx].memory_size;
 region->userspace_addr = 
msg->msg.memory.regions[idx].userspace_addr;
-
+region->mmap_offset = msg->msg.memory.regions[idx].mmap_offset;
+
 assert(idx < msg->fd_num);
 assert(msg->fds[idx] > 0);

-region->mmap_addr =
-(uintptr_t) init_shm_from_fd(msg->fds[idx], 
region->memory_size);
-
+size = region->memory_size + region->mmap_offset;
+guest_mem = init_shm_from_fd(msg->fds[idx], size);
+guest_mem += (region->mmap_offset / sizeof(*guest_mem));
+region->mmap_addr = (uint64_t)guest_mem;
 vhost_server->memory.nregions++;
 }
 }
diff -uNr vapp/vhost_server.h vapp-for-broken-mem-region//vhost_server.h
--- vapp/vhost_server.h 2014-08-30 09:39:20.0 +
+++ vapp-for-broken-mem-region//vhost_server.h  2014-09-05 01:41:27.0 
+
@@ -13,7 +13,9 @@
 uint64_t guest_phys_addr;
 uint64_t memory_size;
 uint64_t userspace_addr;
+   uint64_t mmap_offset;
 uint64_t mmap_addr;
+
 } VhostServerMemoryRegion;

 typedef struct VhostServerMemory {
diff -uNr vapp/vhost_user.h vapp-for-broken-mem-region//vhost_user.h
--- vapp/vhost_user.h   2014-08-30 09:39:20.0 +
+++ vapp-for-broken-mem-region//vhost_user.h2014-09-05 01:40:20.0 
+
@@ -13,6 +13,7 @@
 uint64_t guest_phys_addr;
 uint64_t memory_size;
 uint64_t userspace_addr;
+   uint64_t mmap_offset;
 } VhostUserMemoryRegion;

 typedef struct VhostUserMemory {


the result of the vapp with my patch :

Processing message: VHOST_USER_SET_OWNER
_set_owner
Cmd: VHOST_USER_GET_FEATURES (0x1)
Flags: 0x1
u64: 0x0

Processing message: VHOST_USER_GET_FEATURES
_get_features
Cmd: VHOST_USER_SET_VRING_CALL (0xd)
Flags: 0x1
u64: 0x0

Processing message: VHOST_USER_SET_VRING_CALL
_set_vring_call
Got callfd 0x5
Cmd: VHOST_USER_SET_VRING_CALL (0xd)
Flags: 0x1
u64: 0x1

Processing message: VHOST_USER_SET_VRING_CALL
_set_vring_call
Got callfd 0x6
Cmd: VHOST_USER_SET_FEATURES (0x2)
Flags: 0x1
u64: 0x0

Processing message: VHOST_USER_SET_FEATURES
_set_features
Cmd: VHOST_USER_SET_MEM_TABLE (0x5)
Flags: 0x1
nregions: 2
region:
gpa = 0x0
size = 655360
ua = 0x7f76c000 [0]
region:
gpa = 0xC
size = 2146697216
ua = 0x7f76c00c [1]

Processing message: VHOST_USER_SET_MEM_TABLE
_set_mem_table
mmap: Invalid argument 
//@@@ region 0 mmap failed!
Got memory.nregions 2
Cmd: VHOST_USER_SET_VRING_NUM (0x8)
Flags: 0x1
state: 0 256

Processing message: VHOST_USER_SET_VRING_NUM
_set_vring_num
Cmd: VHOST_USER_SET_VRING_BASE (0xa)
Flags: 0x1
state: 0 0
..

[Qemu-devel] vhost-user mmap failed

2014-09-02 Thread linhafieng
hi,

I run the qemu-master(vhost-user v10)with the vapp(vhost-user v9).It says mmap 
failed,do you know why this happen?

./vhost -s /path/to/socket

Processing message: VHOST_USER_SET_MEM_TABLE
_set_mem_table
mmap: Invalid argument
mmap: Invalid argument
Got memory.nregions 2
Cmd: VHOST_USER_SET_VRING_NUM (0x8)
Flags: 0x1
state: 0 256

./x86_64-softmmu/qemu-system-x86_64 -m 2048 -object 
memory-backend-file,id=mem,size=2048M,mem-path=/mnt/huge,share=on -numa 
node,memdev=mem -chardev socket,id=chr0,path=/path/to/socket  -netdev 
type=vhost-user,id=net0,chardev=chr0 -device virtio-net-pci,netdev=net0