Virtio helper routines for a descriptor ringbuffer implementation
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 22 Oct 2007 01:03:40 +0000 (11:03 +1000)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 23 Oct 2007 05:49:55 +0000 (15:49 +1000)
commit0a8a69dd77ddbd4513b21363021ecde7e1025502
treeed6d8f0756835390b4c0d9a172422f2e42a65523
parentb01d9f2863349b0e041b90c3c86a998ee0fed2b0
Virtio helper routines for a descriptor ringbuffer implementation

These helper routines supply most of the virtqueue_ops for hypervisors
which want to use a ring for virtio.  Unlike the previous lguest
implementation:

1) The rings are variable sized (2^n-1 elements).
2) They have an unfortunate limit of 65535 bytes per sg element.
3) The page numbers are always 64 bit (PAE anyone?)
4) They no longer place used[] on a separate page, just a separate
   cacheline.
5) We do a modulo on a variable.  We could be tricky if we cared.
6) Interrupts and notifies are suppressed using flags within the rings.

Users need only get the ring pages and provide a notify hook (KVM
wants the guest to allocate the rings, lguest does it sanely).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Dor Laor <dor.laor@qumranet.com>
arch/x86/lguest/Kconfig
drivers/virtio/Kconfig
drivers/virtio/Makefile
drivers/virtio/virtio_ring.c [new file with mode: 0644]
include/linux/virtio_ring.h [new file with mode: 0644]