Commit 89bfc105d00202551fa669c2e2779dc15457a227
1 parent
f32fc648
added last_io_time field - '-kernel-kqemu' experimental option
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1754 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
44 additions
and
0 deletions
vl.c
... | ... | @@ -369,6 +369,10 @@ void cpu_outb(CPUState *env, int addr, int val) |
369 | 369 | fprintf(logfile, "outb: %04x %02x\n", addr, val); |
370 | 370 | #endif |
371 | 371 | ioport_write_table[0][addr](ioport_opaque[addr], addr, val); |
372 | +#ifdef USE_KQEMU | |
373 | + if (env) | |
374 | + env->last_io_time = cpu_get_time_fast(); | |
375 | +#endif | |
372 | 376 | } |
373 | 377 | |
374 | 378 | void cpu_outw(CPUState *env, int addr, int val) |
... | ... | @@ -378,6 +382,10 @@ void cpu_outw(CPUState *env, int addr, int val) |
378 | 382 | fprintf(logfile, "outw: %04x %04x\n", addr, val); |
379 | 383 | #endif |
380 | 384 | ioport_write_table[1][addr](ioport_opaque[addr], addr, val); |
385 | +#ifdef USE_KQEMU | |
386 | + if (env) | |
387 | + env->last_io_time = cpu_get_time_fast(); | |
388 | +#endif | |
381 | 389 | } |
382 | 390 | |
383 | 391 | void cpu_outl(CPUState *env, int addr, int val) |
... | ... | @@ -387,6 +395,10 @@ void cpu_outl(CPUState *env, int addr, int val) |
387 | 395 | fprintf(logfile, "outl: %04x %08x\n", addr, val); |
388 | 396 | #endif |
389 | 397 | ioport_write_table[2][addr](ioport_opaque[addr], addr, val); |
398 | +#ifdef USE_KQEMU | |
399 | + if (env) | |
400 | + env->last_io_time = cpu_get_time_fast(); | |
401 | +#endif | |
390 | 402 | } |
391 | 403 | |
392 | 404 | int cpu_inb(CPUState *env, int addr) |
... | ... | @@ -397,6 +409,10 @@ int cpu_inb(CPUState *env, int addr) |
397 | 409 | if (loglevel & CPU_LOG_IOPORT) |
398 | 410 | fprintf(logfile, "inb : %04x %02x\n", addr, val); |
399 | 411 | #endif |
412 | +#ifdef USE_KQEMU | |
413 | + if (env) | |
414 | + env->last_io_time = cpu_get_time_fast(); | |
415 | +#endif | |
400 | 416 | return val; |
401 | 417 | } |
402 | 418 | |
... | ... | @@ -408,6 +424,10 @@ int cpu_inw(CPUState *env, int addr) |
408 | 424 | if (loglevel & CPU_LOG_IOPORT) |
409 | 425 | fprintf(logfile, "inw : %04x %04x\n", addr, val); |
410 | 426 | #endif |
427 | +#ifdef USE_KQEMU | |
428 | + if (env) | |
429 | + env->last_io_time = cpu_get_time_fast(); | |
430 | +#endif | |
411 | 431 | return val; |
412 | 432 | } |
413 | 433 | |
... | ... | @@ -419,6 +439,10 @@ int cpu_inl(CPUState *env, int addr) |
419 | 439 | if (loglevel & CPU_LOG_IOPORT) |
420 | 440 | fprintf(logfile, "inl : %04x %08x\n", addr, val); |
421 | 441 | #endif |
442 | +#ifdef USE_KQEMU | |
443 | + if (env) | |
444 | + env->last_io_time = cpu_get_time_fast(); | |
445 | +#endif | |
422 | 446 | return val; |
423 | 447 | } |
424 | 448 | |
... | ... | @@ -4018,6 +4042,9 @@ static CPUState *cur_cpu; |
4018 | 4042 | int main_loop(void) |
4019 | 4043 | { |
4020 | 4044 | int ret, timeout; |
4045 | +#ifdef CONFIG_PROFILER | |
4046 | + int64_t ti; | |
4047 | +#endif | |
4021 | 4048 | CPUState *env; |
4022 | 4049 | |
4023 | 4050 | cur_cpu = first_cpu; |
... | ... | @@ -4030,7 +4057,13 @@ int main_loop(void) |
4030 | 4057 | env = env->next_cpu; |
4031 | 4058 | if (!env) |
4032 | 4059 | env = first_cpu; |
4060 | +#ifdef CONFIG_PROFILER | |
4061 | + ti = profile_getclock(); | |
4062 | +#endif | |
4033 | 4063 | ret = cpu_exec(env); |
4064 | +#ifdef CONFIG_PROFILER | |
4065 | + qemu_time += profile_getclock() - ti; | |
4066 | +#endif | |
4034 | 4067 | if (ret != EXCP_HALTED) |
4035 | 4068 | break; |
4036 | 4069 | /* all CPUs are halted ? */ |
... | ... | @@ -4067,7 +4100,13 @@ int main_loop(void) |
4067 | 4100 | } else { |
4068 | 4101 | timeout = 10; |
4069 | 4102 | } |
4103 | +#ifdef CONFIG_PROFILER | |
4104 | + ti = profile_getclock(); | |
4105 | +#endif | |
4070 | 4106 | main_loop_wait(timeout); |
4107 | +#ifdef CONFIG_PROFILER | |
4108 | + dev_time += profile_getclock() - ti; | |
4109 | +#endif | |
4071 | 4110 | } |
4072 | 4111 | cpu_disable_ticks(); |
4073 | 4112 | return ret; |
... | ... | @@ -4250,6 +4289,7 @@ enum { |
4250 | 4289 | QEMU_OPTION_full_screen, |
4251 | 4290 | QEMU_OPTION_pidfile, |
4252 | 4291 | QEMU_OPTION_no_kqemu, |
4292 | + QEMU_OPTION_kernel_kqemu, | |
4253 | 4293 | QEMU_OPTION_win2k_hack, |
4254 | 4294 | QEMU_OPTION_usb, |
4255 | 4295 | QEMU_OPTION_usbdevice, |
... | ... | @@ -4305,6 +4345,7 @@ const QEMUOption qemu_options[] = { |
4305 | 4345 | { "no-code-copy", 0, QEMU_OPTION_no_code_copy }, |
4306 | 4346 | #ifdef USE_KQEMU |
4307 | 4347 | { "no-kqemu", 0, QEMU_OPTION_no_kqemu }, |
4348 | + { "kernel-kqemu", 0, QEMU_OPTION_kernel_kqemu }, | |
4308 | 4349 | #endif |
4309 | 4350 | #if defined(TARGET_PPC) || defined(TARGET_SPARC) |
4310 | 4351 | { "g", 1, QEMU_OPTION_g }, |
... | ... | @@ -4879,6 +4920,9 @@ int main(int argc, char **argv) |
4879 | 4920 | case QEMU_OPTION_no_kqemu: |
4880 | 4921 | kqemu_allowed = 0; |
4881 | 4922 | break; |
4923 | + case QEMU_OPTION_kernel_kqemu: | |
4924 | + kqemu_allowed = 2; | |
4925 | + break; | |
4882 | 4926 | #endif |
4883 | 4927 | case QEMU_OPTION_usb: |
4884 | 4928 | usb_enabled = 1; | ... | ... |