diff -ur a/kernel/xen.c b/kernel/xen.c --- a/kernel/xen.c 2007-04-10 22:09:47.000000000 -0500 +++ b/kernel/xen.c 2007-04-10 22:24:40.000000000 -0500 @@ -66,6 +66,7 @@ "movl $0x0, %eax\n" ".loop:\n" "addl $1, %eax\n" + "rdtsc\n" "int $0x1F\n" "jmp .loop\n" "foo_end:\n"); @@ -1022,6 +1023,7 @@ struct lguest *lg = vcpu->xen->lguest; struct lguest_regs *regs = &lg->state->regs; unsigned int cr2; + uint64_t before, after, during; //DPRINTK("-> %s\n", __func__); @@ -1060,8 +1062,10 @@ //validate_page_tables(lg, HYPE_ADDR + HYPE_DATA_SIZE); //DPRINTK("check pg tables for va->0x%08x\n", START_ADDR); //validate_page_tables(lg, START_ADDR); - + + rdtscll(before); run_guest_once(lg); + rdtscll(after); /* Save cr2 now if we page-faulted. */ if (regs->trapnum == 14) @@ -1074,6 +1078,8 @@ DPRINTK("guest->eax = %d\n", regs->eax); DPRINTK("guest trapnum->%d\n", regs->trapnum); + during = ((uint64_t)regs->edx << 32) | regs->eax; + DPRINTK("duration %llu = %llu %llu\n", after - before, during - before, after - during); switch (regs->trapnum) { case 13: /* We've intercepted a GPF. */ DPRINTK("GPF\n");