From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58793) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZkIYg-0005yC-Sh for qemu-devel@nongnu.org; Thu, 08 Oct 2015 17:17:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZkIYf-0007AO-Dx for qemu-devel@nongnu.org; Thu, 08 Oct 2015 17:17:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45273) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZkIYf-0007AE-6A for qemu-devel@nongnu.org; Thu, 08 Oct 2015 17:17:01 -0400 Date: Fri, 9 Oct 2015 00:16:57 +0300 From: "Michael S. Tsirkin" Message-ID: <1444338957-15293-8-git-send-email-mst@redhat.com> References: <1444338957-15293-1-git-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1444338957-15293-1-git-send-email-mst@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 07/25] vhost: add vhost_set_log_base op List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , =?us-ascii?B?PT9VVEYtOD9xP01hcmMtQW5kcj1DMz1BOT0yMEx1cmVhdT89?= From: Marc-Andr=E9 Lureau Split VHOST_SET_LOG_BASE call in a seperate function callback, so that type safety works and more arguments can be added in the next patches. Signed-off-by: Marc-Andr=E9 Lureau Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/virtio/vhost-backend.h | 5 +++++ hw/virtio/vhost-backend.c | 8 ++++++++ hw/virtio/vhost-user.c | 17 ++++++++++++++++- hw/virtio/vhost.c | 6 +++--- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-= backend.h index 3a0f6e2..c6b688a 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -27,13 +27,18 @@ typedef int (*vhost_backend_cleanup)(struct vhost_dev= *dev); typedef int (*vhost_backend_get_vq_index)(struct vhost_dev *dev, int idx= ); typedef int (*vhost_backend_set_vring_enable)(struct vhost_dev *dev, int= enable); =20 +typedef int (*vhost_set_log_base_op)(struct vhost_dev *dev, uint64_t bas= e); + typedef struct VhostOps { VhostBackendType backend_type; vhost_call vhost_call; + vhost_backend_init vhost_backend_init; vhost_backend_cleanup vhost_backend_cleanup; vhost_backend_get_vq_index vhost_backend_get_vq_index; vhost_backend_set_vring_enable vhost_backend_set_vring_enable; + + vhost_set_log_base_op vhost_set_log_base; } VhostOps; =20 extern const VhostOps user_ops; diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c index 72d1392..88d33fd 100644 --- a/hw/virtio/vhost-backend.c +++ b/hw/virtio/vhost-backend.c @@ -11,6 +11,7 @@ #include "hw/virtio/vhost.h" #include "hw/virtio/vhost-backend.h" #include "qemu/error-report.h" +#include "linux/vhost.h" =20 #include =20 @@ -49,12 +50,19 @@ static int vhost_kernel_get_vq_index(struct vhost_dev= *dev, int idx) return idx - dev->vq_index; } =20 +static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base) +{ + return vhost_kernel_call(dev, VHOST_SET_LOG_BASE, &base); +} + static const VhostOps kernel_ops =3D { .backend_type =3D VHOST_BACKEND_TYPE_KERNEL, .vhost_call =3D vhost_kernel_call, .vhost_backend_init =3D vhost_kernel_init, .vhost_backend_cleanup =3D vhost_kernel_cleanup, .vhost_backend_get_vq_index =3D vhost_kernel_get_vq_index, + + .vhost_set_log_base =3D vhost_set_log_base, }; =20 int vhost_set_backend_type(struct vhost_dev *dev, VhostBackendType backe= nd_type) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index b11c0d2..fd4fcbf 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -242,7 +242,6 @@ static int vhost_user_call(struct vhost_dev *dev, uns= igned long int request, break; =20 case VHOST_USER_SET_FEATURES: - case VHOST_USER_SET_LOG_BASE: case VHOST_USER_SET_PROTOCOL_FEATURES: msg.u64 =3D *((__u64 *) arg); msg.size =3D sizeof(m.u64); @@ -367,6 +366,20 @@ static int vhost_user_call(struct vhost_dev *dev, un= signed long int request, return 0; } =20 +static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base) +{ + VhostUserMsg msg =3D { + .request =3D VHOST_USER_SET_LOG_BASE, + .flags =3D VHOST_USER_VERSION, + .u64 =3D base, + .size =3D sizeof(m.u64), + }; + + vhost_user_write(dev, &msg, NULL, 0); + + return 0; +} + static int vhost_user_init(struct vhost_dev *dev, void *opaque) { unsigned long long features; @@ -447,4 +460,6 @@ const VhostOps user_ops =3D { .vhost_backend_cleanup =3D vhost_user_cleanup, .vhost_backend_get_vq_index =3D vhost_user_get_vq_index, .vhost_backend_set_vring_enable =3D vhost_user_set_vring_enable, + + .vhost_set_log_base =3D vhost_set_log_base, }; diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 67e09fe..37bf603 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -336,7 +336,7 @@ static inline void vhost_dev_log_resize(struct vhost_= dev* dev, uint64_t size) =20 /* inform backend of log switching, this must be done before releasing the current log, to ensure no logging is lost */ - r =3D dev->vhost_ops->vhost_call(dev, VHOST_SET_LOG_BASE, &log_base)= ; + r =3D dev->vhost_ops->vhost_set_log_base(dev, log_base); assert(r >=3D 0); vhost_log_put(dev, true); dev->log =3D log; @@ -1140,8 +1140,8 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIOD= evice *vdev) hdev->log_size =3D vhost_get_log_size(hdev); hdev->log =3D vhost_log_get(hdev->log_size); log_base =3D (uintptr_t)hdev->log->log; - r =3D hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE, - hdev->log_size ? &log_base : NUL= L); + r =3D hdev->vhost_ops->vhost_set_log_base(hdev, + hdev->log_size ? log_bas= e : 0); if (r < 0) { r =3D -errno; goto fail_log; --=20 MST