All pastes #433991 Raw Edit

Something

public text v1 · immutable
·published 2007-04-11 03:32 UTC
rendered paste body
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");