--- latencytest/kernel/latencytest.c.orig 2004-07-11 12:29:30.000000000 +0200 +++ latencytest/kernel/latencytest.c 2004-07-11 16:29:48.883109752 +0200 @@ -41,7 +41,7 @@ static void my_interrupt(void *private_d spin_lock(&my_lock); count++; if (count < irq_count) - return; + goto out_unlock; count = 0; if (irq_info.processed < MAX_PROC_CNTS) { int i; @@ -69,6 +69,7 @@ static void my_interrupt(void *private_d } irq_info.processed++; wake_up(&my_sleep); +out_unlock: spin_unlock(&my_lock); } --- latencytest/src/measure.c.orig 2004-07-11 14:20:57.000000000 +0200 +++ latencytest/src/measure.c 2004-07-11 16:25:32.375104896 +0200 @@ -35,9 +35,13 @@ static FILE *profile_fd; static inline unsigned long long int rdtsc(void) { - unsigned long long int x; - __asm__ volatile ("rdtsc" : "=A" (x)); - return x; + unsigned long long int x, y; + for (;;) { + __asm__ volatile ("rdtsc" : "=A" (x)); + __asm__ volatile ("rdtsc" : "=A" (y)); + if (y - x < 1000) + return y; + } } static unsigned long long time_offset;