Re: [PATCH 07/18] virtio ring: inline function to check for events

2011-05-05 Thread Stefan Hajnoczi
On Wed, May 4, 2011 at 9:51 PM, Michael S. Tsirkin m...@redhat.com wrote:
 With the new used_event and avail_event and features, both
 host and guest need similar logic to check whether events are
 enabled, so it helps to put the common code in the header.

 Note that Xen has similar logic for notification hold-off
 in include/xen/interface/io/ring.h with req_event and req_prod
 corresponding to event_idx + 1 and new_idx respectively.
 +1 comes from the fact that req_event and req_prod in Xen start at 1,
 while event index in virtio starts at 0.

 Signed-off-by: Michael S. Tsirkin m...@redhat.com
 ---
  include/linux/virtio_ring.h |   14 ++
  1 files changed, 14 insertions(+), 0 deletions(-)

 diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h
 index f791772..2a3b0ea 100644
 --- a/include/linux/virtio_ring.h
 +++ b/include/linux/virtio_ring.h
 @@ -124,6 +124,20 @@ static inline unsigned vring_size(unsigned int num, 
 unsigned long align)
                + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
  }

 +/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
 +/* Assuming a given event_idx value from the other size, if

s/other size/other side/ ?

Stefan
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 07/18] virtio ring: inline function to check for events

2011-05-05 Thread Michael S. Tsirkin
On Thu, May 05, 2011 at 09:34:46AM +0100, Stefan Hajnoczi wrote:
 On Wed, May 4, 2011 at 9:51 PM, Michael S. Tsirkin m...@redhat.com wrote:
  With the new used_event and avail_event and features, both
  host and guest need similar logic to check whether events are
  enabled, so it helps to put the common code in the header.
 
  Note that Xen has similar logic for notification hold-off
  in include/xen/interface/io/ring.h with req_event and req_prod
  corresponding to event_idx + 1 and new_idx respectively.
  +1 comes from the fact that req_event and req_prod in Xen start at 1,
  while event index in virtio starts at 0.
 
  Signed-off-by: Michael S. Tsirkin m...@redhat.com
  ---
   include/linux/virtio_ring.h |   14 ++
   1 files changed, 14 insertions(+), 0 deletions(-)
 
  diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h
  index f791772..2a3b0ea 100644
  --- a/include/linux/virtio_ring.h
  +++ b/include/linux/virtio_ring.h
  @@ -124,6 +124,20 @@ static inline unsigned vring_size(unsigned int num, 
  unsigned long align)
                 + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
   }
 
  +/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
  +/* Assuming a given event_idx value from the other size, if
 
 s/other size/other side/ ?
 
 Stefan

Exactly. Good catch, thanks.

-- 
MST
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 07/18] virtio ring: inline function to check for events

2011-05-04 Thread Michael S. Tsirkin
With the new used_event and avail_event and features, both
host and guest need similar logic to check whether events are
enabled, so it helps to put the common code in the header.

Note that Xen has similar logic for notification hold-off
in include/xen/interface/io/ring.h with req_event and req_prod
corresponding to event_idx + 1 and new_idx respectively.
+1 comes from the fact that req_event and req_prod in Xen start at 1,
while event index in virtio starts at 0.

Signed-off-by: Michael S. Tsirkin m...@redhat.com
---
 include/linux/virtio_ring.h |   14 ++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h
index f791772..2a3b0ea 100644
--- a/include/linux/virtio_ring.h
+++ b/include/linux/virtio_ring.h
@@ -124,6 +124,20 @@ static inline unsigned vring_size(unsigned int num, 
unsigned long align)
+ sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
 }
 
+/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
+/* Assuming a given event_idx value from the other size, if
+ * we have just incremented index from old to new_idx,
+ * should we trigger an event? */
+static inline int vring_need_event(__u16 event_idx, __u16 new_idx, __u16 old)
+{
+   /* Note: Xen has similar logic for notification hold-off
+* in include/xen/interface/io/ring.h with req_event and req_prod
+* corresponding to event_idx + 1 and new_idx respectively.
+* Note also that req_event and req_prod in Xen start at 1,
+* event indexes in virtio start at 0. */
+   return (__u16)(new_idx - event_idx - 1)  (__u16)(new_idx - old);
+}
+
 #ifdef __KERNEL__
 #include linux/irqreturn.h
 struct virtio_device;
-- 
1.7.5.53.gc233e

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html