virtio: modify vring_init and vring_size to take account of the layout containing...
authorWang Sheng-Hui <shhuiw@gmail.com>
Mon, 29 Aug 2011 07:55:59 +0000 (15:55 +0800)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 2 Nov 2011 01:10:59 +0000 (11:40 +1030)
Based on the layout description in the comments, take account of
the *_event_idx in functions vring_init and vring_size.

Signed-off-by: Wang Sheng-Hui <shhuiw@gmail.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
include/linux/virtio_ring.h

index 4a32cb6da425abe92c9eaa019121f4710171c77a..36be0f6e18a9cf9608c4288cb3343f618e329c87 100644 (file)
@@ -135,13 +135,13 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p,
        vr->num = num;
        vr->desc = p;
        vr->avail = p + num*sizeof(struct vring_desc);
-       vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + align-1)
-                           & ~(align - 1));
+       vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__u16)
+               + align-1) & ~(align - 1));
 }
 
 static inline unsigned vring_size(unsigned int num, unsigned long align)
 {
-       return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (2 + num)
+       return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (3 + num)
                 + align - 1) & ~(align - 1))
                + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
 }