On 12/21/2017 04:53 AM, Michael S. Tsirkin wrote:
On Wed, Dec 20, 2017 at 04:07:41PM +0000, Stefan Hajnoczi wrote:
On Tue, Dec 19, 2017 at 07:11:26PM +0100, Maxime Coquelin wrote:
Before this series, QEMU process virtual addresses are sent to the
user backend as user addresses.
Passing these virtual addresses aren't useful, as the backend doesn't
direct access to QEMU address space.
It does make sense however for kernel backend, which can access QEMU
address space.
This series introduce a new enum set by the backend stating whether it
prefers using QEMU Virtual addresses or Guest physical addresses as
User address, and make vhost-user backend to use Guest physical
addresses.
Maxime Coquelin (3):
vhost-user: rename VhostUserMemory userspace_addr field to user_addr
vhost: introduce backend's user address type
vhost-user: no more leak QEMU virtual addresses to user backend
hw/virtio/vhost-backend.c | 1 +
hw/virtio/vhost-user.c | 6 ++++--
hw/virtio/vhost.c | 16 ++++++++++++----
include/hw/virtio/vhost-backend.h | 6 ++++++
4 files changed, 23 insertions(+), 6 deletions(-)
--
2.14.3
Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com>
This makes make check fail. Any idea why?
That's interesting, it fails because the rings aren't initialized with
vhost-user-test (even without my series, but we don't notice).
It fails in vhost_virtqueue_start(), because vq->desc is NULL.
Adding some debug prints shows that vq->desc_phys, vq->avail_phys and
vq->used_phys are all 0 for both queues.
So when using QEMU VAs as user addresses, vq->desc, vq->used and
vq->avail are translated to a non-NULL address, and it doesn't fail.
Only the multiqueue test returns non-zero and different addresses
between the rings.
I'm looking into it.
Regards,
Maxime