rendered paste bodydiff -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");