---
 Documentation/lguest/lguest.c |    6 ++++++
 drivers/net/virtio_net.c      |    6 +++---
 drivers/virtio/virtio_ring.c  |    6 +++---
 3 files changed, 12 insertions(+), 6 deletions(-)

diff -r f667ab5a1740 Documentation/lguest/lguest.c
--- a/Documentation/lguest/lguest.c	Thu May 08 21:52:49 2008 +1000
+++ b/Documentation/lguest/lguest.c	Fri May 09 09:32:11 2008 +1000
@@ -57,6 +57,8 @@ typedef uint16_t u16;
 typedef uint16_t u16;
 typedef uint8_t u8;
 /*:*/
+
+static struct vring *watch;
 
 #define PAGE_PRESENT 0x7 	/* Present, RW, Execute */
 #define NET_PEERNUM 1
@@ -299,6 +301,7 @@ static void *map_zeroed_pages(unsigned i
 		err(1, "Mmaping %u pages of /dev/zero", num);
 
 	verbose("Memory backing file is %s @ %p\n", memfile_path, addr);
+	memset(addr, 0, getpagesize() * num);
 	return addr;
 }
 
@@ -1162,6 +1165,7 @@ static void add_virtqueue(struct device 
 
 	/* Initialize the vring. */
 	vring_init(&vq->vring, num_descs, p, getpagesize());
+	memset(p, 0, vring_size(num_descs, getpagesize()));
 
 	/* Append virtqueue to this device's descriptor.  We use
 	 * device_config() to get the end of the device's current virtqueues;
@@ -1490,6 +1494,8 @@ static void setup_tun_net(const char *ar
 		/* Now we create the receive and xmit ringfds. */
 		ni->recvfd = map_vring(&dev->vq->vring);
 		ni->xmitfd = map_vring(&dev->vq->next->vring);
+
+		watch = &dev->vq->vring;
 
 		/* Tell the tunnet to use them. */
 		if (ioctl(netfd, TUNSETRECVVRING, ni->recvfd) != 0)
diff -r f667ab5a1740 drivers/net/virtio_net.c
--- a/drivers/net/virtio_net.c	Thu May 08 21:52:49 2008 +1000
+++ b/drivers/net/virtio_net.c	Fri May 09 09:32:11 2008 +1000
@@ -75,14 +75,14 @@ static void skb_xmit_done(struct virtque
 	svq->vq_ops->disable_cb(svq);
 
 	/* Were we waiting for more output buffers? */
-	qstopped = netif_queue_stopped(vi->dev);
-	if (qstopped)
+//	qstopped = netif_queue_stopped(vi->dev);
+//	if (qstopped)
 		netif_wake_queue(vi->dev);
 
 	/* We might be stopped, but not have anything more to send, except for
 	 * that last_xmit_skb we failed last time.  Or we might not be stopped,
 	 * but we should be polite and free xmitted skbs. */
-	if (!qstopped || vi->last_xmit_skb)
+//	if (!qstopped || vi->last_xmit_skb)
 		tasklet_schedule(&vi->tasklet);
 }
 
diff -r f667ab5a1740 drivers/virtio/virtio_ring.c
--- a/drivers/virtio/virtio_ring.c	Thu May 08 21:52:49 2008 +1000
+++ b/drivers/virtio/virtio_ring.c	Fri May 09 09:32:11 2008 +1000
@@ -221,7 +221,7 @@ static void vring_disable_cb(struct virt
 {
 	struct vring_virtqueue *vq = to_vvq(_vq);
 
-	vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
+//	vq->vring.avail->flags |= VRING_AVAIL_F_NO_INTERRUPT;
 }
 
 static bool vring_enable_cb(struct virtqueue *_vq)
@@ -229,11 +229,11 @@ static bool vring_enable_cb(struct virtq
 	struct vring_virtqueue *vq = to_vvq(_vq);
 
 	START_USE(vq);
-	BUG_ON(!(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT));
+//	BUG_ON(!(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT));
 
 	/* We optimistically turn back on interrupts, then check if there was
 	 * more to do. */
-	vq->vring.avail->flags &= ~VRING_AVAIL_F_NO_INTERRUPT;
+//	vq->vring.avail->flags &= ~VRING_AVAIL_F_NO_INTERRUPT;
 	mb();
 	if (unlikely(more_used(vq))) {
 		END_USE(vq);
