---
 Documentation/lguest/lguest.c |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff -r daa7d9a7d9d5 Documentation/lguest/lguest.c
--- a/Documentation/lguest/lguest.c	Tue Jun 17 10:50:09 2008 +1000
+++ b/Documentation/lguest/lguest.c	Tue Jun 17 11:49:23 2008 +1000
@@ -92,6 +92,9 @@ static int timeoutpipe[2];
 
 /* a per-cpu variable indicating whose vcpu is currently running */
 static unsigned int __thread cpu_id;
+
+/* How many recv and xmit notifies did we offer? */
+static int num_xmit_notifies, num_recv_notifies, num_xmit_kicks, num_recv_kicks;
 
 /* This is our list of devices. */
 struct device_list
@@ -871,6 +874,8 @@ static bool handle_console_input(int fd,
 				/* Just in case Waker is blocked in BREAK, send
 				 * unbreak now. */
 				write(fd, args, sizeof(args));
+				printf("xmit_notifies = %u, recv_notifies = %u, xmit_kicks = %u, recv_kicks = %u\n",
+				       num_xmit_notifies, num_recv_notifies, num_xmit_kicks, num_recv_kicks);
 				exit(2);
 			}
 			abort->count = 0;
@@ -958,6 +963,14 @@ static void handle_netring_output(int fd
 	/* We have output, kick the kernel. */
 	if (write(ni->xmitfd, "", 0) != 0)
 		err(1, "Writing to xmitfd");
+	num_xmit_kicks++;
+}
+
+static void handle_netring_newrcvbufs(int fd, struct virtqueue *vq)
+{
+	/* Snap the Waker out of its select loop. */
+	write(waker_fds.pipe[1], "", 1);
+	num_recv_kicks++;
 }
 
 /* This is where we handle a packet coming in from the tun device to our
@@ -1510,6 +1523,7 @@ static bool xmitfd_used(int fd, struct d
 	if (read(ni->xmitfd, NULL, 0) != 0)
 		err(1, "%s: reading xmitfd", dev->name);
 	trigger_irq(fd, ni->xmit_vq);
+	num_xmit_notifies++;
 
 	return true;
 }
@@ -1522,6 +1536,7 @@ static bool recvfd_used(int fd, struct d
 	if (read(ni->recvfd, NULL, 0) != 0)
 		err(1, "%s: reading recvfd", dev->name);
 	trigger_irq(fd, ni->recv_vq);
+	num_recv_notifies++;
 
 	return true;
 }
@@ -1590,7 +1605,7 @@ static void setup_tun_net(char *arg, boo
 	if (rings) {
 		/* First we create a new network device. */
 		dev = new_device("net", VIRTIO_ID_NET, netfd, NULL);
-		add_virtqueue(dev, VIRTQUEUE_NUM, NULL);
+		add_virtqueue(dev, VIRTQUEUE_NUM, handle_netring_newrcvbufs);
 		add_virtqueue(dev, VIRTQUEUE_NUM, handle_netring_output);
 	} else {
 		/* First we create a new network device. */
