aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--softmmu_template.h6
-rw-r--r--target-i386/cpu.h10
2 files changed, 16 insertions, 0 deletions
diff --git a/softmmu_template.h b/softmmu_template.h
index 9bae4f6282..1c12c42411 100644
--- a/softmmu_template.h
+++ b/softmmu_template.h
@@ -68,6 +68,9 @@ static inline DATA_TYPE glue(io_read, SUFFIX)(target_phys_addr_t physaddr,
res |= (uint64_t)io_mem_read[index][2](io_mem_opaque[index], physaddr + 4) << 32;
#endif
#endif /* SHIFT > 2 */
+#ifdef USE_KQEMU
+ env->last_io_time = cpu_get_time_fast();
+#endif
return res;
}
@@ -201,6 +204,9 @@ static inline void glue(io_write, SUFFIX)(target_phys_addr_t physaddr,
io_mem_write[index][2](io_mem_opaque[index], physaddr + 4, val >> 32);
#endif
#endif /* SHIFT > 2 */
+#ifdef USE_KQEMU
+ env->last_io_time = cpu_get_time_fast();
+#endif
}
void REGPARM(2) glue(glue(__st, SUFFIX), MMUSUFFIX)(target_ulong addr,
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 450dd8cbe4..eca3993b90 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -522,6 +522,7 @@ typedef struct CPUX86State {
#ifdef USE_KQEMU
int kqemu_enabled;
+ int last_io_time;
#endif
/* in order to simplify APIC support, we leave this pointer to the
user */
@@ -637,6 +638,15 @@ void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0);
#define X86_DUMP_FPU 0x0001 /* dump FPU state too */
#define X86_DUMP_CCOP 0x0002 /* dump qemu flag cache */
+#ifdef USE_KQEMU
+static inline int cpu_get_time_fast(void)
+{
+ int low, high;
+ asm volatile("rdtsc" : "=a" (low), "=d" (high));
+ return low;
+}
+#endif
+
#define TARGET_PAGE_BITS 12
#include "cpu-all.h"