On Wed, 13 Jul 2016 13:09:44 +0800
Fam Zheng <f...@redhat.com> wrote:

> Using this function instead of virtio_add_queue marks the vq as aio
> based. This differentiation will be useful in later patches.
> 
> Distinguish between virtqueue processing in the iohandler context and main 
> loop
> AioContext.  iohandler context is isolated from AioContexts and therefore does
> not run during aio_poll().
> 
> Signed-off-by: Fam Zheng <f...@redhat.com>
> ---
>  hw/virtio/virtio.c         | 38 ++++++++++++++++++++++++++++++++++----
>  include/hw/virtio/virtio.h |  3 +++
>  2 files changed, 37 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 2cc68d24..2fbed0c 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -97,6 +97,7 @@ struct VirtQueue
>      uint16_t vector;
>      VirtIOHandleOutput handle_output;
>      VirtIOHandleOutput handle_aio_output;
> +    bool use_aio;

After some thought: We don't need to migrate that, so your patch is
fine.

>      VirtIODevice *vdev;
>      EventNotifier guest_notifier;
>      EventNotifier host_notifier;

(...)

> +/* Add a virt queue and mark AIO.
> + * An AIO queue will use the AioContext based event interface instead of the
> + * default IOHandler and EventNotifier interface.
> + */
> +VirtQueue *virtio_add_queue_aio(VirtIODevice *vdev, int queue_size,
> +                                VirtIOHandleOutput handle_output)
> +{
> +    return virtio_add_queue_internal(vdev, queue_size, handle_output, true);
> +}
> +
> +/* Add a normal virt queue (on the contrary to the AIO version above. */

/* Add a normal (non-AIO) virtqueue. */

?

> +VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size,
> +                            VirtIOHandleOutput handle_output)
> +{
> +    return virtio_add_queue_internal(vdev, queue_size, handle_output, false);
> +}
> +
>  void virtio_del_queue(VirtIODevice *vdev, int n)
>  {
>      if (n < 0 || n >= VIRTIO_QUEUE_MAX) {
> @@ -1830,11 +1850,21 @@ static void 
> virtio_queue_host_notifier_read(EventNotifier *n)
>  void virtio_queue_set_host_notifier_fd_handler(VirtQueue *vq, bool assign,
>                                                 bool set_handler)
>  {
> +    AioContext *ctx = qemu_get_aio_context();

Add a blank line.

>      if (assign && set_handler) {

(...)

Other than the nits above:

Reviewed-by: Cornelia Huck <cornelia.h...@de.ibm.com>


Reply via email to