All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] virtIO question
@ 2016-11-05 10:50 zhunxun
  2016-11-05 14:46 ` jitendra kumar khasdev
  0 siblings, 1 reply; 15+ messages in thread
From: zhunxun @ 2016-11-05 10:50 UTC (permalink / raw)
  To: qemu-devel

who can explain the means of idx in VRingUsed and VRingAvail structure about virtIO??
thanks!



zhunxun@gmail.com

^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [Qemu-devel] virtIO question
@ 2016-11-05 15:23 jack
  0 siblings, 0 replies; 15+ messages in thread
From: jack @ 2016-11-05 15:23 UTC (permalink / raw)
  To: jitendra kumar khasdev; +Cc: qemu

   thanks a lot!I will read the document carefully!

   æ�¥è‡ª é…æ—� MX5

   -------- 原始邮件 --------
   �件人:jitendra kumar khasdev <jkhasdev@gmail.com>
   æ—¶é—´ï¼šå‘¨å… 11月5æ—¥ 23:11
   收件人:Peter Maydell <peter.maydell@linaro.org>
   抄�:zhunxun@gmail.com,qemu-devel <qemu-devel@nongnu.org>
   主题:Re: [Qemu-devel] virtIO question

     Have you looked at the virtio specification?

   No.
   Â

     This describes
     the overall structure and communication mechanism, which
     QEMU and Linux each only implement one half of:
     [1]http://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.html

   Thanks Peter. This doc looks me interesting.Â
   ---
   JitendraÂ

References

   1. http://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.html

^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [Qemu-devel] virtIO question
@ 2016-11-11 14:17 jack
  0 siblings, 0 replies; 15+ messages in thread
From: jack @ 2016-11-11 14:17 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu

[-- Attachment #1: Type: text/plain, Size: 2697 bytes --]

   thanks,but i really do not found when the driver will add mutiple
   buffers then call kick function,this is the key problem .

   æ�¥è‡ª é…æ—� MX5

   -------- 原始邮件 --------
   �件人:Stefan Hajnoczi <stefanha@gmail.com>
   时间:周五 11月11日 20:03
   收件人:zhunxun@gmail.com
   抄�:qemu <qemu-devel@nongnu.org>
   主题:Re: Re: [Qemu-devel] virtIO question
   On Thu, Nov 10, 2016 at 08:16:38PM +0800, zhunxun@gmail.com wrote:
   > From this point of view ,I think it make sense well, thank you very
   much!
   >  but I have another question about notify mechanism between virtIO
   driver and qemu.
   > according the source code of Linux and qemu,
   > when driver add a sg buffer to send queue named sq,
   > sq->vq->vring.avail->idx++
   > vq->num_added++
   > and then use virtqueue_kick_prepare to make sure if need notify qemu.
   > it (new_idx-event_idx)<(new_idx-old_idx)
   This expression is wrong.  The specification and Linux code both say:
     (u16)(new_idx - event_idx - 1) < (u16)(new_idx - old_idx)
   Both the (u16) and the -1 matter.  Maybe that's why you are confused by
   this?
   > if it is true,then notify other side.
   > However,every time driver add a sg,then virtqueue_kick_prepare is
   called,and vq->num_added  is reseted to 0,so in fact ,I think
   vq->num_added is always 0 or 1。
   A driver may add multiple buffers to the virtqueue by calling
   virtqueue_add_sgs() or similar functions multiple times before kicking.
   Therefore vq->num_added > 1 is possible.
   > as to qemu side,every time when pop a elem from virtqueue,it set
   VRingUsed.ring[vring.num] to the lastest VRingAvail.idx, this according
   the arithmetic ((new_idx-event_idx)<(new_idx-old_idx)),it seems that
   this mechanism does not make sense
   You are basically asking "how does event_idx work?".  The specification
   says:
     "The driver can ask the device to delay interrupts until an entry
   with
     an index specified by the “used_event� field is written in the
   used ring
     (equivalently, until the idx field in the used ring will reach the
     value used_event + 1)."
   and:
     "The device can ask the driver to delay noti�cations until an entry
     with an index specified by the “avail_event� field is written in
   the
     available ring (equivalently, until the idx field in the used ring
   will
     reach the value avail_event + 1)."
   Whenever the device or driver wants to notify, it first checks if the
   index update crossed the event index set by the other side.

[-- Attachment #2: signature.asc --]
[-- Type: application/octet-stream, Size: 23 bytes --]



解码邮件时出错

^ permalink raw reply	[flat|nested] 15+ messages in thread
* [Qemu-devel] virtIO question
@ 2016-11-14 12:36 zhunxun
  2016-11-14 16:36 ` Stefan Hajnoczi
  0 siblings, 1 reply; 15+ messages in thread
From: zhunxun @ 2016-11-14 12:36 UTC (permalink / raw)
  To: qemu

I have a question about qemu.is it a bug in qemu version 1.2?
in qemu version 1.2 ,it set avail event by the code :
 if (vq->vdev->guest_features & (1 << VIRTIO_RING_F_EVENT_IDX)) {
        vring_avail_event(vq, vring_avail_idx(vq));
        }
 and in version 2.7 the code is
 if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
        vring_set_avail_event(vq, vq->last_avail_idx);
    }

a big difference of this is the value.vring_avail_idx(vq)is the latest value of VRingAvail.idx,and vq->last_avail_idx is not, I think it really different with the two different values,and I think the later is right,is it??
thanks a lot!!



zhunxun@gmail.com

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2016-11-14 16:37 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-05 10:50 [Qemu-devel] virtIO question zhunxun
2016-11-05 14:46 ` jitendra kumar khasdev
2016-11-05 15:04   ` Peter Maydell
2016-11-05 15:11     ` jitendra kumar khasdev
2016-11-09 10:58       ` zhunxun
2016-11-10 10:32         ` Stefan Hajnoczi
2016-11-10 12:16           ` zhunxun
2016-11-11 12:03             ` Stefan Hajnoczi
2016-11-12  8:43               ` zhunxun
2016-11-14 14:06                 ` Stefan Hajnoczi
2016-11-14  7:14               ` zhunxun
2016-11-05 15:23 jack
2016-11-11 14:17 jack
2016-11-14 12:36 zhunxun
2016-11-14 16:36 ` Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.