qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 0/5] kvm: Make ioeventfd usable on s390.


From: Christian Borntraeger
Subject: Re: [Qemu-devel] [PATCH v3 0/5] kvm: Make ioeventfd usable on s390.
Date: Tue, 26 Feb 2013 13:13:39 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130106 Thunderbird/17.0.2

On 26/02/13 12:18, Michael S. Tsirkin wrote:
> virtio_ccw: pass a cookie value to kvm hypercall
> 
> Lookups by channel/vq pair on host during virtio notifications might be
> expensive.  Interpret hypercall return value as a cookie which host can
> use to do device lookups for the next notification more efficiently.
> 
> Signed-off-by: Michael S. Tsirkin <address@hidden>
> 
> ---
> 
> diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c
> index 2029b6c..1054f3a 100644
> --- a/drivers/s390/kvm/virtio_ccw.c
> +++ b/drivers/s390/kvm/virtio_ccw.c
> @@ -77,6 +77,7 @@ struct virtio_ccw_vq_info {
>       void *queue;
>       struct vq_info_block *info_block;
>       struct list_head node;
> +     long cookie;
>  };
> 
>  #define KVM_VIRTIO_CCW_RING_ALIGN 4096
> @@ -145,15 +146,18 @@ static int ccw_io_helper(struct virtio_ccw_device 
> *vcdev,
>  }
> 
>  static inline long do_kvm_notify(struct subchannel_id schid,
> -                              unsigned long queue_index)
> +                              unsigned long queue_index,
> +                              long cookie)
>  {
>       register unsigned long __nr asm("1") = KVM_S390_VIRTIO_CCW_NOTIFY;
>       register struct subchannel_id __schid asm("2") = schid;
>       register unsigned long __index asm("3") = queue_index;
>       register long __rc asm("2");
> +     register long __cookie asm("4") = cookie;
> 
>       asm volatile ("diag 2,4,0x500\n"
> -                   : "=d" (__rc) : "d" (__nr), "d" (__schid), "d" (__index)
> +                   : "=d" (__rc) : "d" (__nr), "d" (__schid), "d" (__index),
> +                   "d"(__cookie)
>                     : "memory", "cc");
>       return __rc;
>  }
> @@ -166,7 +170,7 @@ static void virtio_ccw_kvm_notify(struct virtqueue *vq)
> 
>       vcdev = to_vc_device(info->vq->vdev);
>       ccw_device_get_schid(vcdev->cdev, &schid);
> -     do_kvm_notify(schid, virtqueue_get_queue_index(vq));
> +     info->cookie = do_kvm_notify(schid, virtqueue_get_queue_index(vq), 
> info->cookie);
>  }
> 
>  static int virtio_ccw_read_vq_conf(struct virtio_ccw_device *vcdev,


Hmmm, forget my last mail. This actually could be even forward and backward 
compatible.
In the virtio spec we will not define the cookie format (just 64bit int). That 
will allow
qemu or future kernels to use that for other things (as long as a validity 
check is 
possible) if we dont have a kvm bus.

Now:

old guest, old host: 
works.

old guest, new host: 
the cookie from the guest contains junk, the host needs to detect that the 
cookie is 
junk and ignores it. It will return the new cookie anyway. 

new guest, old host:
The guest will get a junk cookie and pass it back to the host. But the host 
will ignore
it anyway.

new guest, new host:
works.

So...
Acked-by: Christian Borntraeger <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]