Clocksource is continuous regardless of the state of the host's TSC.
authorTony Breeds <tony@bakeyournoodle.com>
Mon, 22 Oct 2007 00:56:25 +0000 (10:56 +1000)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 23 Oct 2007 05:49:49 +0000 (15:49 +1000)
Currently lguest will spend a lot of of time waking up the host, as it
cannot go tickless (if the [host] TSC has been marked unstable). On my
laptop I was getting ~40% of wakeups from lguest.

With this patch applied, my laptop is much happier!

Signed-off-by: Tony Breeds <tony@bakeyournoodle.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/lguest/lguest.c

index c9ca610..8e9e485 100644 (file)
@@ -679,6 +679,7 @@ static struct clocksource lguest_clock = {
        .mask           = CLOCKSOURCE_MASK(64),
        .mult           = 1 << 22,
        .shift          = 22,
+       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
 };
 
 /* The "scheduler clock" is just our real clock, adjusted to start at zero */
@@ -760,11 +761,9 @@ static void lguest_time_init(void)
         * the TSC, otherwise it's a dumb nanosecond-resolution clock.  Either
         * way, the "rating" is initialized so high that it's always chosen
         * over any other clocksource. */
-       if (lguest_data.tsc_khz) {
+       if (lguest_data.tsc_khz)
                lguest_clock.mult = clocksource_khz2mult(lguest_data.tsc_khz,
                                                         lguest_clock.shift);
-               lguest_clock.flags = CLOCK_SOURCE_IS_CONTINUOUS;
-       }
        clock_base = lguest_clock_read();
        clocksource_register(&lguest_clock);