aboutsummaryrefslogtreecommitdiff
path: root/Documentation/lguest/lguest.c
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2008-08-26 16:56:05 +0000
committerSteve French <sfrench@us.ibm.com>2008-08-26 16:56:05 +0000
commit3dae49abef945c55c10fa7c479cfd8fd13af55db (patch)
tree487c47c6d23cc28a259b913396aeaff0b792d32d /Documentation/lguest/lguest.c
parent6ce5eecb9cd3ac97b952c50309b87c31488a45e9 (diff)
parentb8e6c91c74e9f0279b7c51048779b3d62da60b88 (diff)
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'Documentation/lguest/lguest.c')
-rw-r--r--Documentation/lguest/lguest.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c
index 655414821ed..7228369d101 100644
--- a/Documentation/lguest/lguest.c
+++ b/Documentation/lguest/lguest.c
@@ -895,6 +895,9 @@ static void handle_console_output(int fd, struct virtqueue *vq, bool timeout)
}
}
+/* This is called when we no longer want to hear about Guest changes to a
+ * virtqueue. This is more efficient in high-traffic cases, but it means we
+ * have to set a timer to check if any more changes have occurred. */
static void block_vq(struct virtqueue *vq)
{
struct itimerval itm;
@@ -939,6 +942,11 @@ static void handle_net_output(int fd, struct virtqueue *vq, bool timeout)
if (!timeout && num)
block_vq(vq);
+ /* We never quite know how long should we wait before we check the
+ * queue again for more packets. We start at 500 microseconds, and if
+ * we get fewer packets than last time, we assume we made the timeout
+ * too small and increase it by 10 microseconds. Otherwise, we drop it
+ * by one microsecond every time. It seems to work well enough. */
if (timeout) {
if (num < last_timeout_num)
timeout_usec += 10;