aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/lguest/lguest.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2008-08-26 00:19:27 -0500
committerRusty Russell <rusty@rustcorp.com.au>2008-08-26 00:19:28 +1000
commit1dc3e3bcbfe335843ec938bfdddb34d10f4dd278 (patch)
tree8666189f7a285c8e4c6512784dff39971fefa30c /Documentation/lguest/lguest.c
parentbf2002967775cbb233876d51ff94e8daa7e77858 (diff)
downloadkernel_samsung_aries-1dc3e3bcbfe335843ec938bfdddb34d10f4dd278.zip
kernel_samsung_aries-1dc3e3bcbfe335843ec938bfdddb34d10f4dd278.tar.gz
kernel_samsung_aries-1dc3e3bcbfe335843ec938bfdddb34d10f4dd278.tar.bz2
lguest: update commentry
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
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 6554148..7228369 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;