lkml.org 
[lkml]   [2011]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 06/18] virtio_ring: avail event index interface
    Define a new feature bit for the host to
    declare that it uses an avail_event index
    (like Xen) instead of a feature bit
    to enable/disable interrupts.

    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    ---
    include/linux/virtio_ring.h | 11 ++++++++---
    1 files changed, 8 insertions(+), 3 deletions(-)

    diff --git a/include/linux/virtio_ring.h b/include/linux/virtio_ring.h
    index f5c1b75..f791772 100644
    --- a/include/linux/virtio_ring.h
    +++ b/include/linux/virtio_ring.h
    @@ -32,6 +32,9 @@
    /* The Guest publishes the used index for which it expects an interrupt
    * at the end of the avail ring. Host should ignore the avail->flags field. */
    #define VIRTIO_RING_F_USED_EVENT_IDX 29
    +/* The Host publishes the avail index for which it expects a kick
    + * at the end of the used ring. Guest should ignore the used->flags field. */
    +#define VIRTIO_RING_F_AVAIL_EVENT_IDX 32

    /* Virtio ring descriptors: 16 bytes. These can chain together via "next". */
    struct vring_desc {
    @@ -96,11 +99,13 @@ struct vring {
    * __u16 used_flags;
    * __u16 used_idx;
    * struct vring_used_elem used[num];
    + * __u16 avail_event_idx;
    * };
    */
    -/* We publish the used event index at the end of the available ring.
    - * It is at the end for backwards compatibility. */
    +/* We publish the used event index at the end of the available ring, and vice
    + * versa. They are at the end for backwards compatibility. */
    #define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
    +#define vring_avail_event(vr) (*(__u16 *)&(vr)->used->ring[(vr)->num])

    static inline void vring_init(struct vring *vr, unsigned int num, void *p,
    unsigned long align)
    @@ -116,7 +121,7 @@ static inline unsigned vring_size(unsigned int num, unsigned long align)
    {
    return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (2 + num)
    + align - 1) & ~(align - 1))
    - + sizeof(__u16) * 2 + sizeof(struct vring_used_elem) * num;
    + + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
    }

    #ifdef __KERNEL__
    --
    1.7.5.53.gc233e


    \
     
     \ /
      Last update: 2011-05-04 22:59    [W:0.022 / U:94.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site