Home | History | Annotate | Download | only in qemu
      1 /*
      2  * QEMU System Emulator
      3  *
      4  * Copyright (c) 2003-2008 Fabrice Bellard
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a copy
      7  * of this software and associated documentation files (the "Software"), to deal
      8  * in the Software without restriction, including without limitation the rights
      9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     10  * copies of the Software, and to permit persons to whom the Software is
     11  * furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     22  * THE SOFTWARE.
     23  */
     24 
     25 #include "sysemu.h"
     26 #include "net.h"
     27 #include "monitor.h"
     28 #include "console.h"
     29 
     30 #include "hw/hw.h"
     31 
     32 #include <unistd.h>
     33 #include <fcntl.h>
     34 #include <time.h>
     35 #include <errno.h>
     36 #include <sys/time.h>
     37 #include <signal.h>
     38 #ifdef __FreeBSD__
     39 #include <sys/param.h>
     40 #endif
     41 
     42 #ifdef __linux__
     43 #include <sys/ioctl.h>
     44 #include <linux/rtc.h>
     45 /* For the benefit of older linux systems which don't supply it,
     46    we use a local copy of hpet.h. */
     47 /* #include <linux/hpet.h> */
     48 #include "hpet.h"
     49 #endif
     50 
     51 #ifdef _WIN32
     52 #include <windows.h>
     53 #include <mmsystem.h>
     54 #endif
     55 
     56 #include "qemu-timer.h"
     57 
     58 /* Conversion factor from emulated instructions to virtual clock ticks.  */
     59 int icount_time_shift;
     60 /* Arbitrarily pick 1MIPS as the minimum allowable speed.  */
     61 #define MAX_ICOUNT_SHIFT 10
     62 /* Compensate for varying guest execution speed.  */
     63 int64_t qemu_icount_bias;
     64 static QEMUTimer *icount_rt_timer;
     65 static QEMUTimer *icount_vm_timer;
     66 
     67 /***********************************************************/
     68 /* guest cycle counter */
     69 
     70 typedef struct TimersState {
     71     int64_t cpu_ticks_prev;
     72     int64_t cpu_ticks_offset;
     73     int64_t cpu_clock_offset;
     74     int32_t cpu_ticks_enabled;
     75     int64_t dummy;
     76 } TimersState;
     77 
     78 static void timer_save(QEMUFile *f, void *opaque)
     79 {
     80     TimersState *s = opaque;
     81 
     82     if (s->cpu_ticks_enabled) {
     83         hw_error("cannot save state if virtual timers are running");
     84     }
     85     qemu_put_be64(f, s->cpu_ticks_prev);
     86     qemu_put_be64(f, s->cpu_ticks_offset);
     87     qemu_put_be64(f, s->cpu_clock_offset);
     88  }
     89 
     90 static int timer_load(QEMUFile *f, void *opaque, int version_id)
     91 {
     92     TimersState *s = opaque;
     93 
     94     if (version_id != 1 && version_id != 2)
     95         return -EINVAL;
     96     if (s->cpu_ticks_enabled) {
     97         return -EINVAL;
     98     }
     99     s->cpu_ticks_prev   = qemu_get_sbe64(f);
    100     s->cpu_ticks_offset = qemu_get_sbe64(f);
    101     if (version_id == 2) {
    102         s->cpu_clock_offset = qemu_get_sbe64(f);
    103     }
    104     return 0;
    105 }
    106 
    107 
    108 TimersState timers_state;
    109 
    110 /* return the host CPU cycle counter and handle stop/restart */
    111 int64_t cpu_get_ticks(void)
    112 {
    113     if (use_icount) {
    114         return cpu_get_icount();
    115     }
    116     if (!timers_state.cpu_ticks_enabled) {
    117         return timers_state.cpu_ticks_offset;
    118     } else {
    119         int64_t ticks;
    120         ticks = cpu_get_real_ticks();
    121         if (timers_state.cpu_ticks_prev > ticks) {
    122             /* Note: non increasing ticks may happen if the host uses
    123                software suspend */
    124             timers_state.cpu_ticks_offset += timers_state.cpu_ticks_prev - ticks;
    125         }
    126         timers_state.cpu_ticks_prev = ticks;
    127         return ticks + timers_state.cpu_ticks_offset;
    128     }
    129 }
    130 
    131 /* return the host CPU monotonic timer and handle stop/restart */
    132 static int64_t cpu_get_clock(void)
    133 {
    134     int64_t ti;
    135     if (!timers_state.cpu_ticks_enabled) {
    136         return timers_state.cpu_clock_offset;
    137     } else {
    138         ti = get_clock();
    139         return ti + timers_state.cpu_clock_offset;
    140     }
    141 }
    142 
    143 #ifndef CONFIG_IOTHREAD
    144 static int64_t qemu_icount_delta(void)
    145 {
    146     if (!use_icount) {
    147         return 5000 * (int64_t) 1000000;
    148     } else if (use_icount == 1) {
    149         /* When not using an adaptive execution frequency
    150            we tend to get badly out of sync with real time,
    151            so just delay for a reasonable amount of time.  */
    152         return 0;
    153     } else {
    154         return cpu_get_icount() - cpu_get_clock();
    155     }
    156 }
    157 #endif
    158 
    159 /* enable cpu_get_ticks() */
    160 void cpu_enable_ticks(void)
    161 {
    162     if (!timers_state.cpu_ticks_enabled) {
    163         timers_state.cpu_ticks_offset -= cpu_get_real_ticks();
    164         timers_state.cpu_clock_offset -= get_clock();
    165         timers_state.cpu_ticks_enabled = 1;
    166     }
    167 }
    168 
    169 /* disable cpu_get_ticks() : the clock is stopped. You must not call
    170    cpu_get_ticks() after that.  */
    171 void cpu_disable_ticks(void)
    172 {
    173     if (timers_state.cpu_ticks_enabled) {
    174         timers_state.cpu_ticks_offset = cpu_get_ticks();
    175         timers_state.cpu_clock_offset = cpu_get_clock();
    176         timers_state.cpu_ticks_enabled = 0;
    177     }
    178 }
    179 
    180 /***********************************************************/
    181 /* timers */
    182 
    183 #define QEMU_CLOCK_REALTIME 0
    184 #define QEMU_CLOCK_VIRTUAL  1
    185 #define QEMU_CLOCK_HOST     2
    186 
    187 struct QEMUClock {
    188     int type;
    189     int enabled;
    190 
    191     QEMUTimer *warp_timer;
    192 };
    193 
    194 struct QEMUTimer {
    195     QEMUClock *clock;
    196     int64_t expire_time;	/* in nanoseconds */
    197     int scale;
    198     QEMUTimerCB *cb;
    199     void *opaque;
    200     struct QEMUTimer *next;
    201 };
    202 
    203 struct qemu_alarm_timer {
    204     char const *name;
    205     int (*start)(struct qemu_alarm_timer *t);
    206     void (*stop)(struct qemu_alarm_timer *t);
    207     void (*rearm)(struct qemu_alarm_timer *t);
    208 #if defined(__linux__)
    209     int fd;
    210     timer_t timer;
    211 #elif defined(_WIN32)
    212     HANDLE timer;
    213 #endif
    214     char expired;
    215     char pending;
    216 };
    217 
    218 static struct qemu_alarm_timer *alarm_timer;
    219 
    220 static bool qemu_timer_expired_ns(QEMUTimer *timer_head, int64_t current_time)
    221 {
    222     return timer_head && (timer_head->expire_time <= current_time);
    223 }
    224 
    225 int qemu_alarm_pending(void)
    226 {
    227     return alarm_timer->pending;
    228 }
    229 
    230 static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
    231 {
    232     return !!t->rearm;
    233 }
    234 
    235 static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
    236 {
    237     if (!alarm_has_dynticks(t))
    238         return;
    239 
    240     t->rearm(t);
    241 }
    242 
    243 /* TODO: MIN_TIMER_REARM_NS should be optimized */
    244 #define MIN_TIMER_REARM_NS 250000
    245 
    246 #ifdef _WIN32
    247 
    248 static int mm_start_timer(struct qemu_alarm_timer *t);
    249 static void mm_stop_timer(struct qemu_alarm_timer *t);
    250 static void mm_rearm_timer(struct qemu_alarm_timer *t);
    251 
    252 static int win32_start_timer(struct qemu_alarm_timer *t);
    253 static void win32_stop_timer(struct qemu_alarm_timer *t);
    254 static void win32_rearm_timer(struct qemu_alarm_timer *t);
    255 
    256 #else
    257 
    258 static int unix_start_timer(struct qemu_alarm_timer *t);
    259 static void unix_stop_timer(struct qemu_alarm_timer *t);
    260 
    261 #ifdef __linux__
    262 
    263 static int dynticks_start_timer(struct qemu_alarm_timer *t);
    264 static void dynticks_stop_timer(struct qemu_alarm_timer *t);
    265 static void dynticks_rearm_timer(struct qemu_alarm_timer *t);
    266 
    267 static int hpet_start_timer(struct qemu_alarm_timer *t);
    268 static void hpet_stop_timer(struct qemu_alarm_timer *t);
    269 
    270 static int rtc_start_timer(struct qemu_alarm_timer *t);
    271 static void rtc_stop_timer(struct qemu_alarm_timer *t);
    272 
    273 #endif /* __linux__ */
    274 
    275 #endif /* _WIN32 */
    276 
    277 /* Correlation between real and virtual time is always going to be
    278    fairly approximate, so ignore small variation.
    279    When the guest is idle real and virtual time will be aligned in
    280    the IO wait loop.  */
    281 #define ICOUNT_WOBBLE (get_ticks_per_sec() / 10)
    282 
    283 static void icount_adjust(void)
    284 {
    285     int64_t cur_time;
    286     int64_t cur_icount;
    287     int64_t delta;
    288     static int64_t last_delta;
    289     /* If the VM is not running, then do nothing.  */
    290     if (!vm_running)
    291         return;
    292 
    293     cur_time = cpu_get_clock();
    294     cur_icount = qemu_get_clock_ns(vm_clock);
    295     delta = cur_icount - cur_time;
    296     /* FIXME: This is a very crude algorithm, somewhat prone to oscillation.  */
    297     if (delta > 0
    298         && last_delta + ICOUNT_WOBBLE < delta * 2
    299         && icount_time_shift > 0) {
    300         /* The guest is getting too far ahead.  Slow time down.  */
    301         icount_time_shift--;
    302     }
    303     if (delta < 0
    304         && last_delta - ICOUNT_WOBBLE > delta * 2
    305         && icount_time_shift < MAX_ICOUNT_SHIFT) {
    306         /* The guest is getting too far behind.  Speed time up.  */
    307         icount_time_shift++;
    308     }
    309     last_delta = delta;
    310     qemu_icount_bias = cur_icount - (qemu_icount << icount_time_shift);
    311 }
    312 
    313 static void icount_adjust_rt(void * opaque)
    314 {
    315     qemu_mod_timer(icount_rt_timer,
    316                    qemu_get_clock_ms(rt_clock) + 1000);
    317     icount_adjust();
    318 }
    319 
    320 static void icount_adjust_vm(void * opaque)
    321 {
    322     qemu_mod_timer(icount_vm_timer,
    323                    qemu_get_clock_ns(vm_clock) + get_ticks_per_sec() / 10);
    324     icount_adjust();
    325 }
    326 
    327 int64_t qemu_icount_round(int64_t count)
    328 {
    329     return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
    330 }
    331 
    332 static struct qemu_alarm_timer alarm_timers[] = {
    333 #ifndef _WIN32
    334 #ifdef __linux__
    335     /* HPET - if available - is preferred */
    336     {"hpet", hpet_start_timer, hpet_stop_timer, NULL},
    337     /* ...otherwise try RTC */
    338     {"rtc", rtc_start_timer, rtc_stop_timer, NULL},
    339 #endif
    340     {"unix", unix_start_timer, unix_stop_timer, NULL},
    341 #ifdef __linux__
    342     /* on Linux, the 'dynticks' clock sometimes doesn't work
    343      * properly. this results in the UI freezing while emulation
    344      * continues, for several seconds... So move it to the end
    345      * of the list. */
    346     {"dynticks", dynticks_start_timer,
    347      dynticks_stop_timer, dynticks_rearm_timer},
    348 #endif
    349 #else
    350     {"mmtimer", mm_start_timer, mm_stop_timer, NULL},
    351     {"mmtimer2", mm_start_timer, mm_stop_timer, mm_rearm_timer},
    352     {"dynticks", win32_start_timer, win32_stop_timer, win32_rearm_timer},
    353     {"win32", win32_start_timer, win32_stop_timer, NULL},
    354 #endif
    355     {NULL, }
    356 };
    357 
    358 static void show_available_alarms(void)
    359 {
    360     int i;
    361 
    362     printf("Available alarm timers, in order of precedence:\n");
    363     for (i = 0; alarm_timers[i].name; i++)
    364         printf("%s\n", alarm_timers[i].name);
    365 }
    366 
    367 void configure_alarms(char const *opt)
    368 {
    369     int i;
    370     int cur = 0;
    371     int count = ARRAY_SIZE(alarm_timers) - 1;
    372     char *arg;
    373     char *name;
    374     struct qemu_alarm_timer tmp;
    375 
    376     if (!strcmp(opt, "?")) {
    377         show_available_alarms();
    378         exit(0);
    379     }
    380 
    381     arg = qemu_strdup(opt);
    382 
    383     /* Reorder the array */
    384     name = strtok(arg, ",");
    385     while (name) {
    386         for (i = 0; i < count && alarm_timers[i].name; i++) {
    387             if (!strcmp(alarm_timers[i].name, name))
    388                 break;
    389         }
    390 
    391         if (i == count) {
    392             fprintf(stderr, "Unknown clock %s\n", name);
    393             goto next;
    394         }
    395 
    396         if (i < cur)
    397             /* Ignore */
    398             goto next;
    399 
    400 	/* Swap */
    401         tmp = alarm_timers[i];
    402         alarm_timers[i] = alarm_timers[cur];
    403         alarm_timers[cur] = tmp;
    404 
    405         cur++;
    406 next:
    407         name = strtok(NULL, ",");
    408     }
    409 
    410     qemu_free(arg);
    411 
    412     if (cur) {
    413         /* Disable remaining timers */
    414         for (i = cur; i < count; i++)
    415             alarm_timers[i].name = NULL;
    416     } else {
    417         show_available_alarms();
    418         exit(1);
    419     }
    420 }
    421 
    422 #define QEMU_NUM_CLOCKS 3
    423 
    424 QEMUClock *rt_clock;
    425 QEMUClock *vm_clock;
    426 QEMUClock *host_clock;
    427 
    428 static QEMUTimer *active_timers[QEMU_NUM_CLOCKS];
    429 
    430 static QEMUClock *qemu_new_clock(int type)
    431 {
    432     QEMUClock *clock;
    433     clock = qemu_mallocz(sizeof(QEMUClock));
    434     clock->type = type;
    435     clock->enabled = 1;
    436     return clock;
    437 }
    438 
    439 void qemu_clock_enable(QEMUClock *clock, int enabled)
    440 {
    441     clock->enabled = enabled;
    442 }
    443 
    444 static int64_t vm_clock_warp_start;
    445 
    446 static void icount_warp_rt(void *opaque)
    447 {
    448     if (vm_clock_warp_start == -1) {
    449         return;
    450     }
    451 
    452     if (vm_running) {
    453         int64_t clock = qemu_get_clock_ns(rt_clock);
    454         int64_t warp_delta = clock - vm_clock_warp_start;
    455         if (use_icount == 1) {
    456             qemu_icount_bias += warp_delta;
    457         } else {
    458             /*
    459              * In adaptive mode, do not let the vm_clock run too
    460              * far ahead of real time.
    461              */
    462             int64_t cur_time = cpu_get_clock();
    463             int64_t cur_icount = qemu_get_clock_ns(vm_clock);
    464             int64_t delta = cur_time - cur_icount;
    465             qemu_icount_bias += MIN(warp_delta, delta);
    466         }
    467         if (qemu_timer_expired(active_timers[QEMU_CLOCK_VIRTUAL],
    468                                qemu_get_clock_ns(vm_clock))) {
    469             qemu_notify_event();
    470         }
    471     }
    472     vm_clock_warp_start = -1;
    473 }
    474 
    475 void qemu_clock_warp(QEMUClock *clock)
    476 {
    477     int64_t deadline;
    478 
    479     if (!clock->warp_timer) {
    480         return;
    481     }
    482 
    483     /*
    484      * There are too many global variables to make the "warp" behavior
    485      * applicable to other clocks.  But a clock argument removes the
    486      * need for if statements all over the place.
    487      */
    488     assert(clock == vm_clock);
    489 
    490     /*
    491      * If the CPUs have been sleeping, advance the vm_clock timer now.  This
    492      * ensures that the deadline for the timer is computed correctly below.
    493      * This also makes sure that the insn counter is synchronized before the
    494      * CPU starts running, in case the CPU is woken by an event other than
    495      * the earliest vm_clock timer.
    496      */
    497     icount_warp_rt(NULL);
    498     if (qemu_cpu_has_work(cpu_single_env) || !active_timers[clock->type]) {
    499         qemu_del_timer(clock->warp_timer);
    500         return;
    501     }
    502 
    503     vm_clock_warp_start = qemu_get_clock_ns(rt_clock);
    504     deadline = qemu_next_icount_deadline();
    505     if (deadline > 0) {
    506         /*
    507          * Ensure the vm_clock proceeds even when the virtual CPU goes to
    508          * sleep.  Otherwise, the CPU might be waiting for a future timer
    509          * interrupt to wake it up, but the interrupt never comes because
    510          * the vCPU isn't running any insns and thus doesn't advance the
    511          * vm_clock.
    512          *
    513          * An extreme solution for this problem would be to never let VCPUs
    514          * sleep in icount mode if there is a pending vm_clock timer; rather
    515          * time could just advance to the next vm_clock event.  Instead, we
    516          * do stop VCPUs and only advance vm_clock after some "real" time,
    517          * (related to the time left until the next event) has passed.  This
    518          * rt_clock timer will do this.  This avoids that the warps are too
    519          * visible externally---for example, you will not be sending network
    520          * packets continously instead of every 100ms.
    521          */
    522         qemu_mod_timer(clock->warp_timer, vm_clock_warp_start + deadline);
    523     } else {
    524         qemu_notify_event();
    525     }
    526 }
    527 
    528 QEMUTimer *qemu_new_timer(QEMUClock *clock, int scale,
    529                           QEMUTimerCB *cb, void *opaque)
    530 {
    531     QEMUTimer *ts;
    532 
    533     ts = qemu_mallocz(sizeof(QEMUTimer));
    534     ts->clock = clock;
    535     ts->cb = cb;
    536     ts->opaque = opaque;
    537     ts->scale = scale;
    538     return ts;
    539 }
    540 
    541 void qemu_free_timer(QEMUTimer *ts)
    542 {
    543     qemu_free(ts);
    544 }
    545 
    546 /* stop a timer, but do not dealloc it */
    547 void qemu_del_timer(QEMUTimer *ts)
    548 {
    549     QEMUTimer **pt, *t;
    550 
    551     /* NOTE: this code must be signal safe because
    552        qemu_timer_expired() can be called from a signal. */
    553     pt = &active_timers[ts->clock->type];
    554     for(;;) {
    555         t = *pt;
    556         if (!t)
    557             break;
    558         if (t == ts) {
    559             *pt = t->next;
    560             break;
    561         }
    562         pt = &t->next;
    563     }
    564 }
    565 
    566 /* modify the current timer so that it will be fired when current_time
    567    >= expire_time. The corresponding callback will be called. */
    568 static void qemu_mod_timer_ns(QEMUTimer *ts, int64_t expire_time)
    569 {
    570     QEMUTimer **pt, *t;
    571 
    572     qemu_del_timer(ts);
    573 
    574     /* add the timer in the sorted list */
    575     /* NOTE: this code must be signal safe because
    576        qemu_timer_expired() can be called from a signal. */
    577     pt = &active_timers[ts->clock->type];
    578     for(;;) {
    579         t = *pt;
    580         if (!qemu_timer_expired_ns(t, expire_time)) {
    581             break;
    582         }
    583         pt = &t->next;
    584     }
    585     ts->expire_time = expire_time;
    586     ts->next = *pt;
    587     *pt = ts;
    588 
    589     /* Rearm if necessary  */
    590     if (pt == &active_timers[ts->clock->type]) {
    591         if (!alarm_timer->pending) {
    592             qemu_rearm_alarm_timer(alarm_timer);
    593         }
    594         /* Interrupt execution to force deadline recalculation.  */
    595         qemu_clock_warp(ts->clock);
    596         if (use_icount) {
    597             qemu_notify_event();
    598     }
    599     }
    600 }
    601 
    602 /* modify the current timer so that it will be fired when current_time
    603    >= expire_time. The corresponding callback will be called. */
    604 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
    605 {
    606     qemu_mod_timer_ns(ts, expire_time * ts->scale);
    607 }
    608 
    609 int qemu_timer_pending(QEMUTimer *ts)
    610 {
    611     QEMUTimer *t;
    612     for(t = active_timers[ts->clock->type]; t != NULL; t = t->next) {
    613         if (t == ts)
    614             return 1;
    615     }
    616     return 0;
    617 }
    618 
    619 int qemu_timer_expired(QEMUTimer *timer_head, int64_t current_time)
    620 {
    621     return qemu_timer_expired_ns(timer_head, current_time * timer_head->scale);
    622 }
    623 
    624 static void qemu_run_timers(QEMUClock *clock)
    625 {
    626     QEMUTimer **ptimer_head, *ts;
    627     int64_t current_time;
    628 
    629     if (!clock->enabled)
    630         return;
    631 
    632     current_time = qemu_get_clock_ns(clock);
    633     ptimer_head = &active_timers[clock->type];
    634     for(;;) {
    635         ts = *ptimer_head;
    636         if (!qemu_timer_expired_ns(ts, current_time)) {
    637             break;
    638         }
    639         /* remove timer from the list before calling the callback */
    640         *ptimer_head = ts->next;
    641         ts->next = NULL;
    642 
    643         /* run the callback (the timer list can be modified) */
    644         ts->cb(ts->opaque);
    645     }
    646 }
    647 
    648 int64_t qemu_get_clock(QEMUClock *clock)
    649 {
    650     switch(clock->type) {
    651     case QEMU_CLOCK_REALTIME:
    652         return get_clock() / 1000000;
    653     default:
    654     case QEMU_CLOCK_VIRTUAL:
    655         if (use_icount) {
    656             return cpu_get_icount();
    657         } else {
    658             return cpu_get_clock();
    659         }
    660     case QEMU_CLOCK_HOST:
    661         return get_clock_realtime();
    662     }
    663 }
    664 
    665 int64_t qemu_get_clock_ns(QEMUClock *clock)
    666 {
    667     switch(clock->type) {
    668     case QEMU_CLOCK_REALTIME:
    669         return get_clock();
    670     default:
    671     case QEMU_CLOCK_VIRTUAL:
    672         if (use_icount) {
    673             return cpu_get_icount();
    674         } else {
    675             return cpu_get_clock();
    676         }
    677     case QEMU_CLOCK_HOST:
    678         return get_clock_realtime();
    679     }
    680 }
    681 
    682 void init_clocks(void)
    683 {
    684     rt_clock = qemu_new_clock(QEMU_CLOCK_REALTIME);
    685     vm_clock = qemu_new_clock(QEMU_CLOCK_VIRTUAL);
    686     host_clock = qemu_new_clock(QEMU_CLOCK_HOST);
    687 
    688     rtc_clock = host_clock;
    689 }
    690 
    691 /* save a timer */
    692 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
    693 {
    694     uint64_t expire_time;
    695 
    696     if (qemu_timer_pending(ts)) {
    697         expire_time = ts->expire_time;
    698     } else {
    699         expire_time = -1;
    700     }
    701     qemu_put_be64(f, expire_time);
    702 }
    703 
    704 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
    705 {
    706     uint64_t expire_time;
    707 
    708     expire_time = qemu_get_be64(f);
    709     if (expire_time != -1) {
    710         qemu_mod_timer_ns(ts, expire_time);
    711     } else {
    712         qemu_del_timer(ts);
    713     }
    714 }
    715 
    716 #if 0
    717 static const VMStateDescription vmstate_timers = {
    718     .name = "timer",
    719     .version_id = 2,
    720     .minimum_version_id = 1,
    721     .minimum_version_id_old = 1,
    722     .fields      = (VMStateField []) {
    723         VMSTATE_INT64(cpu_ticks_offset, TimersState),
    724         VMSTATE_INT64(dummy, TimersState),
    725         VMSTATE_INT64_V(cpu_clock_offset, TimersState, 2),
    726         VMSTATE_END_OF_LIST()
    727     }
    728 };
    729 #endif
    730 
    731 void configure_icount(const char *option)
    732 {
    733     register_savevm("timer", 0, 2, timer_save, timer_load, &timers_state);
    734 
    735     if (!option)
    736         return;
    737 
    738 #ifdef CONFIG_IOTHREAD
    739     vm_clock->warp_timer = qemu_new_timer_ns(rt_clock, icount_warp_rt, NULL);
    740 #endif
    741 
    742     if (strcmp(option, "auto") != 0) {
    743         icount_time_shift = strtol(option, NULL, 0);
    744         use_icount = 1;
    745         return;
    746     }
    747 
    748     use_icount = 2;
    749 
    750     /* 125MIPS seems a reasonable initial guess at the guest speed.
    751        It will be corrected fairly quickly anyway.  */
    752     icount_time_shift = 3;
    753 
    754     /* Have both realtime and virtual time triggers for speed adjustment.
    755        The realtime trigger catches emulated time passing too slowly,
    756        the virtual time trigger catches emulated time passing too fast.
    757        Realtime triggers occur even when idle, so use them less frequently
    758        than VM triggers.  */
    759     icount_rt_timer = qemu_new_timer_ms(rt_clock, icount_adjust_rt, NULL);
    760     qemu_mod_timer(icount_rt_timer,
    761                    qemu_get_clock_ms(rt_clock) + 1000);
    762     icount_vm_timer = qemu_new_timer_ns(vm_clock, icount_adjust_vm, NULL);
    763     qemu_mod_timer(icount_vm_timer,
    764                    qemu_get_clock_ns(vm_clock) + get_ticks_per_sec() / 10);
    765 }
    766 
    767 void qemu_run_all_timers(void)
    768 {
    769     alarm_timer->pending = 0;
    770 
    771     /* rearm timer, if not periodic */
    772     if (alarm_timer->expired) {
    773         alarm_timer->expired = 0;
    774         qemu_rearm_alarm_timer(alarm_timer);
    775     }
    776 
    777     /* vm time timers */
    778     if (vm_running) {
    779         qemu_run_timers(vm_clock);
    780     }
    781 
    782     qemu_run_timers(rt_clock);
    783     qemu_run_timers(host_clock);
    784 }
    785 
    786 static int timer_alarm_pending = 1;
    787 
    788 int qemu_timer_alarm_pending(void)
    789 {
    790     int ret = timer_alarm_pending;
    791     timer_alarm_pending = 0;
    792     return ret;
    793 }
    794 
    795 
    796 static int64_t qemu_next_alarm_deadline(void);
    797 
    798 #ifdef _WIN32
    799 static void CALLBACK host_alarm_handler(PVOID lpParam, BOOLEAN unused)
    800 #else
    801 static void host_alarm_handler(int host_signum)
    802 #endif
    803 {
    804     struct qemu_alarm_timer *t = alarm_timer;
    805     if (!t)
    806 	return;
    807 
    808 #if 0
    809 #define DISP_FREQ 1000
    810     {
    811         static int64_t delta_min = INT64_MAX;
    812         static int64_t delta_max, delta_cum, last_clock, delta, ti;
    813         static int count;
    814         ti = qemu_get_clock_ns(vm_clock);
    815         if (last_clock != 0) {
    816             delta = ti - last_clock;
    817             if (delta < delta_min)
    818                 delta_min = delta;
    819             if (delta > delta_max)
    820                 delta_max = delta;
    821             delta_cum += delta;
    822             if (++count == DISP_FREQ) {
    823                 printf("timer: min=%" PRId64 " us max=%" PRId64 " us avg=%" PRId64 " us avg_freq=%0.3f Hz\n",
    824                        muldiv64(delta_min, 1000000, get_ticks_per_sec()),
    825                        muldiv64(delta_max, 1000000, get_ticks_per_sec()),
    826                        muldiv64(delta_cum, 1000000 / DISP_FREQ, get_ticks_per_sec()),
    827                        (double)get_ticks_per_sec() / ((double)delta_cum / DISP_FREQ));
    828                 count = 0;
    829                 delta_min = INT64_MAX;
    830                 delta_max = 0;
    831                 delta_cum = 0;
    832             }
    833         }
    834         last_clock = ti;
    835     }
    836 #endif
    837     if (alarm_has_dynticks(t) ||
    838         qemu_next_alarm_deadline () <= 0) {
    839         t->expired = alarm_has_dynticks(t);
    840         t->pending = 1;
    841         timer_alarm_pending = 1;
    842         qemu_notify_event();
    843     }
    844 }
    845 
    846 int64_t qemu_next_icount_deadline(void)
    847 {
    848     /* To avoid problems with overflow limit this to 2^32.  */
    849     int64_t delta = INT32_MAX;
    850 
    851     assert(use_icount);
    852     if (active_timers[QEMU_CLOCK_VIRTUAL]) {
    853         delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
    854                      qemu_get_clock_ns(vm_clock);
    855     }
    856 
    857     if (delta < 0)
    858         delta = 0;
    859 
    860     return delta;
    861 }
    862 
    863 static int64_t qemu_next_alarm_deadline(void)
    864 {
    865     int64_t delta;
    866     int64_t rtdelta;
    867 
    868     if (!use_icount && active_timers[QEMU_CLOCK_VIRTUAL]) {
    869         delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
    870                      qemu_get_clock_ns(vm_clock);
    871     } else {
    872         delta = INT32_MAX;
    873     }
    874     if (active_timers[QEMU_CLOCK_HOST]) {
    875         int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time -
    876                  qemu_get_clock_ns(host_clock);
    877         if (hdelta < delta)
    878             delta = hdelta;
    879     }
    880     if (active_timers[QEMU_CLOCK_REALTIME]) {
    881         rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time -
    882                  qemu_get_clock_ns(rt_clock));
    883         if (rtdelta < delta)
    884             delta = rtdelta;
    885     }
    886 
    887     return delta;
    888 }
    889 
    890 #if defined(__linux__)
    891 
    892 #define RTC_FREQ 1024
    893 
    894 static void enable_sigio_timer(int fd)
    895 {
    896     struct sigaction act;
    897 
    898     /* timer signal */
    899     sigfillset(&act.sa_mask);
    900     act.sa_flags = 0;
    901     act.sa_handler = host_alarm_handler;
    902 
    903     sigaction(SIGIO, &act, NULL);
    904     fcntl_setfl(fd, O_ASYNC);
    905     fcntl(fd, F_SETOWN, getpid());
    906 }
    907 
    908 static int hpet_start_timer(struct qemu_alarm_timer *t)
    909 {
    910     struct hpet_info info;
    911     int r, fd;
    912 
    913     fd = open("/dev/hpet", O_RDONLY);
    914     if (fd < 0)
    915         return -1;
    916 
    917     /* Set frequency */
    918     r = ioctl(fd, HPET_IRQFREQ, RTC_FREQ);
    919     if (r < 0) {
    920         fprintf(stderr, "Could not configure '/dev/hpet' to have a 1024Hz timer. This is not a fatal\n"
    921                 "error, but for better emulation accuracy type:\n"
    922                 "'echo 1024 > /proc/sys/dev/hpet/max-user-freq' as root.\n");
    923         goto fail;
    924     }
    925 
    926     /* Check capabilities */
    927     r = ioctl(fd, HPET_INFO, &info);
    928     if (r < 0)
    929         goto fail;
    930 
    931     /* Enable periodic mode */
    932     r = ioctl(fd, HPET_EPI, 0);
    933     if (info.hi_flags && (r < 0))
    934         goto fail;
    935 
    936     /* Enable interrupt */
    937     r = ioctl(fd, HPET_IE_ON, 0);
    938     if (r < 0)
    939         goto fail;
    940 
    941     enable_sigio_timer(fd);
    942     t->fd = fd;
    943 
    944     return 0;
    945 fail:
    946     close(fd);
    947     return -1;
    948 }
    949 
    950 static void hpet_stop_timer(struct qemu_alarm_timer *t)
    951 {
    952     int fd = t->fd;
    953 
    954     close(fd);
    955 }
    956 
    957 static int rtc_start_timer(struct qemu_alarm_timer *t)
    958 {
    959     int rtc_fd;
    960     unsigned long current_rtc_freq = 0;
    961 
    962     TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
    963     if (rtc_fd < 0)
    964         return -1;
    965     ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
    966     if (current_rtc_freq != RTC_FREQ &&
    967         ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
    968         fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
    969                 "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
    970                 "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
    971         goto fail;
    972     }
    973     if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) {
    974     fail:
    975         close(rtc_fd);
    976         return -1;
    977     }
    978 
    979     enable_sigio_timer(rtc_fd);
    980 
    981     t->fd = rtc_fd;
    982 
    983     return 0;
    984 }
    985 
    986 static void rtc_stop_timer(struct qemu_alarm_timer *t)
    987 {
    988     int rtc_fd = t->fd;
    989 
    990     close(rtc_fd);
    991 }
    992 
    993 static int dynticks_start_timer(struct qemu_alarm_timer *t)
    994 {
    995     struct sigevent ev;
    996     timer_t host_timer;
    997     struct sigaction act;
    998 
    999     sigfillset(&act.sa_mask);
   1000     act.sa_flags = 0;
   1001     act.sa_handler = host_alarm_handler;
   1002 
   1003     sigaction(SIGALRM, &act, NULL);
   1004 
   1005     /*
   1006      * Initialize ev struct to 0 to avoid valgrind complaining
   1007      * about uninitialized data in timer_create call
   1008      */
   1009     memset(&ev, 0, sizeof(ev));
   1010     ev.sigev_value.sival_int = 0;
   1011     ev.sigev_notify = SIGEV_SIGNAL;
   1012     ev.sigev_signo = SIGALRM;
   1013 
   1014     if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) {
   1015         perror("timer_create");
   1016 
   1017         /* disable dynticks */
   1018         fprintf(stderr, "Dynamic Ticks disabled\n");
   1019 
   1020         return -1;
   1021     }
   1022 
   1023     t->timer = host_timer;
   1024 
   1025     return 0;
   1026 }
   1027 
   1028 static void dynticks_stop_timer(struct qemu_alarm_timer *t)
   1029 {
   1030     timer_t host_timer = t->timer;
   1031 
   1032     timer_delete(host_timer);
   1033 }
   1034 
   1035 static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
   1036 {
   1037     timer_t host_timer = t->timer;
   1038     struct itimerspec timeout;
   1039     int64_t nearest_delta_ns = INT64_MAX;
   1040     int64_t current_ns;
   1041 
   1042     assert(alarm_has_dynticks(t));
   1043     if (!active_timers[QEMU_CLOCK_REALTIME] &&
   1044         !active_timers[QEMU_CLOCK_VIRTUAL] &&
   1045         !active_timers[QEMU_CLOCK_HOST])
   1046         return;
   1047 
   1048     nearest_delta_ns = qemu_next_alarm_deadline();
   1049     if (nearest_delta_ns < MIN_TIMER_REARM_NS)
   1050         nearest_delta_ns = MIN_TIMER_REARM_NS;
   1051 
   1052     /* check whether a timer is already running */
   1053     if (timer_gettime(host_timer, &timeout)) {
   1054         perror("gettime");
   1055         fprintf(stderr, "Internal timer error: aborting\n");
   1056         exit(1);
   1057     }
   1058     current_ns = timeout.it_value.tv_sec * 1000000000LL + timeout.it_value.tv_nsec;
   1059     if (current_ns && current_ns <= nearest_delta_ns)
   1060         return;
   1061 
   1062     timeout.it_interval.tv_sec = 0;
   1063     timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
   1064     timeout.it_value.tv_sec =  nearest_delta_ns / 1000000000;
   1065     timeout.it_value.tv_nsec = nearest_delta_ns % 1000000000;
   1066     if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
   1067         perror("settime");
   1068         fprintf(stderr, "Internal timer error: aborting\n");
   1069         exit(1);
   1070     }
   1071 }
   1072 
   1073 #endif /* defined(__linux__) */
   1074 
   1075 #if !defined(_WIN32)
   1076 
   1077 static int unix_start_timer(struct qemu_alarm_timer *t)
   1078 {
   1079     struct sigaction act;
   1080     struct itimerval itv;
   1081     int err;
   1082 
   1083     /* timer signal */
   1084     sigfillset(&act.sa_mask);
   1085     act.sa_flags = 0;
   1086     act.sa_handler = host_alarm_handler;
   1087 
   1088     sigaction(SIGALRM, &act, NULL);
   1089 
   1090     itv.it_interval.tv_sec = 0;
   1091     /* for i386 kernel 2.6 to get 1 ms */
   1092     itv.it_interval.tv_usec = 999;
   1093     itv.it_value.tv_sec = 0;
   1094     itv.it_value.tv_usec = 10 * 1000;
   1095 
   1096     err = setitimer(ITIMER_REAL, &itv, NULL);
   1097     if (err)
   1098         return -1;
   1099 
   1100     return 0;
   1101 }
   1102 
   1103 static void unix_stop_timer(struct qemu_alarm_timer *t)
   1104 {
   1105     struct itimerval itv;
   1106 
   1107     memset(&itv, 0, sizeof(itv));
   1108     setitimer(ITIMER_REAL, &itv, NULL);
   1109 }
   1110 
   1111 #endif /* !defined(_WIN32) */
   1112 
   1113 
   1114 #ifdef _WIN32
   1115 
   1116 static MMRESULT mm_timer;
   1117 static unsigned mm_period;
   1118 
   1119 static void CALLBACK mm_alarm_handler(UINT uTimerID, UINT uMsg,
   1120                                       DWORD_PTR dwUser, DWORD_PTR dw1,
   1121                                       DWORD_PTR dw2)
   1122 {
   1123     struct qemu_alarm_timer *t = alarm_timer;
   1124     if (!t) {
   1125         return;
   1126     }
   1127     if (alarm_has_dynticks(t) || qemu_next_alarm_deadline() <= 0) {
   1128         t->expired = alarm_has_dynticks(t);
   1129         t->pending = 1;
   1130         qemu_notify_event();
   1131     }
   1132 }
   1133 
   1134 static int mm_start_timer(struct qemu_alarm_timer *t)
   1135 {
   1136     TIMECAPS tc;
   1137     UINT flags;
   1138 
   1139     memset(&tc, 0, sizeof(tc));
   1140     timeGetDevCaps(&tc, sizeof(tc));
   1141 
   1142     mm_period = tc.wPeriodMin;
   1143     timeBeginPeriod(mm_period);
   1144 
   1145     flags = TIME_CALLBACK_FUNCTION;
   1146     if (alarm_has_dynticks(t)) {
   1147         flags |= TIME_ONESHOT;
   1148     } else {
   1149         flags |= TIME_PERIODIC;
   1150     }
   1151 
   1152     mm_timer = timeSetEvent(1,                  /* interval (ms) */
   1153                             mm_period,          /* resolution */
   1154                             mm_alarm_handler,   /* function */
   1155                             (DWORD_PTR)t,       /* parameter */
   1156                         flags);
   1157 
   1158     if (!mm_timer) {
   1159         fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n",
   1160                 GetLastError());
   1161         timeEndPeriod(mm_period);
   1162         return -1;
   1163     }
   1164 
   1165     return 0;
   1166 }
   1167 
   1168 static void mm_stop_timer(struct qemu_alarm_timer *t)
   1169 {
   1170     timeKillEvent(mm_timer);
   1171     timeEndPeriod(mm_period);
   1172 }
   1173 
   1174 static void mm_rearm_timer(struct qemu_alarm_timer *t)
   1175 {
   1176     int nearest_delta_ms;
   1177 
   1178     assert(alarm_has_dynticks(t));
   1179     if (!active_timers[QEMU_CLOCK_REALTIME] &&
   1180         !active_timers[QEMU_CLOCK_VIRTUAL] &&
   1181         !active_timers[QEMU_CLOCK_HOST]) {
   1182         return;
   1183     }
   1184 
   1185     timeKillEvent(mm_timer);
   1186 
   1187     nearest_delta_ms = (qemu_next_alarm_deadline() + 999999) / 1000000;
   1188     if (nearest_delta_ms < 1) {
   1189         nearest_delta_ms = 1;
   1190     }
   1191     mm_timer = timeSetEvent(nearest_delta_ms,
   1192                             mm_period,
   1193                             mm_alarm_handler,
   1194                             (DWORD_PTR)t,
   1195                             TIME_ONESHOT | TIME_CALLBACK_FUNCTION);
   1196 
   1197     if (!mm_timer) {
   1198         fprintf(stderr, "Failed to re-arm win32 alarm timer %ld\n",
   1199                 GetLastError());
   1200 
   1201         timeEndPeriod(mm_period);
   1202         exit(1);
   1203     }
   1204 }
   1205 
   1206 static int win32_start_timer(struct qemu_alarm_timer *t)
   1207 {
   1208     HANDLE hTimer;
   1209     BOOLEAN success;
   1210 
   1211     /* If you call ChangeTimerQueueTimer on a one-shot timer (its period
   1212        is zero) that has already expired, the timer is not updated.  Since
   1213        creating a new timer is relatively expensive, set a bogus one-hour
   1214        interval in the dynticks case.  */
   1215     success = CreateTimerQueueTimer(&hTimer,
   1216                           NULL,
   1217                           host_alarm_handler,
   1218                           t,
   1219                           1,
   1220                           alarm_has_dynticks(t) ? 3600000 : 1,
   1221                           WT_EXECUTEINTIMERTHREAD);
   1222 
   1223     if (!success) {
   1224         fprintf(stderr, "Failed to initialize win32 alarm timer: %ld\n",
   1225                 GetLastError());
   1226         return -1;
   1227     }
   1228 
   1229     t->timer = hTimer;
   1230     return 0;
   1231 }
   1232 
   1233 static void win32_stop_timer(struct qemu_alarm_timer *t)
   1234 {
   1235     HANDLE hTimer = t->timer;
   1236 
   1237     if (hTimer) {
   1238         DeleteTimerQueueTimer(NULL, hTimer, NULL);
   1239     }
   1240 }
   1241 
   1242 static void win32_rearm_timer(struct qemu_alarm_timer *t)
   1243 {
   1244     HANDLE hTimer = t->timer;
   1245     int nearest_delta_ms;
   1246     BOOLEAN success;
   1247 
   1248     assert(alarm_has_dynticks(t));
   1249     if (!active_timers[QEMU_CLOCK_REALTIME] &&
   1250         !active_timers[QEMU_CLOCK_VIRTUAL] &&
   1251         !active_timers[QEMU_CLOCK_HOST])
   1252         return;
   1253 
   1254     nearest_delta_ms = (qemu_next_alarm_deadline() + 999999) / 1000000;
   1255     if (nearest_delta_ms < 1) {
   1256         nearest_delta_ms = 1;
   1257     }
   1258     success = ChangeTimerQueueTimer(NULL,
   1259                                     hTimer,
   1260                                     nearest_delta_ms,
   1261                                     3600000);
   1262 
   1263     if (!success) {
   1264         fprintf(stderr, "Failed to rearm win32 alarm timer: %ld\n",
   1265                 GetLastError());
   1266         exit(-1);
   1267     }
   1268 
   1269 }
   1270 
   1271 #endif /* _WIN32 */
   1272 
   1273 static void alarm_timer_on_change_state_rearm(void *opaque, int running, int reason)
   1274 {
   1275     if (running)
   1276         qemu_rearm_alarm_timer((struct qemu_alarm_timer *) opaque);
   1277 }
   1278 
   1279 int init_timer_alarm(void)
   1280 {
   1281     struct qemu_alarm_timer *t = NULL;
   1282     int i, err = -1;
   1283 
   1284     for (i = 0; alarm_timers[i].name; i++) {
   1285         t = &alarm_timers[i];
   1286 
   1287         err = t->start(t);
   1288         if (!err)
   1289             break;
   1290     }
   1291 
   1292     if (err) {
   1293         err = -ENOENT;
   1294         goto fail;
   1295     }
   1296 
   1297     /* first event is at time 0 */
   1298     t->pending = 1;
   1299     alarm_timer = t;
   1300     qemu_add_vm_change_state_handler(alarm_timer_on_change_state_rearm, t);
   1301 
   1302     return 0;
   1303 
   1304 fail:
   1305     return err;
   1306 }
   1307 
   1308 void quit_timers(void)
   1309 {
   1310     struct qemu_alarm_timer *t = alarm_timer;
   1311     alarm_timer = NULL;
   1312     t->stop(t);
   1313 }
   1314 
   1315 extern int tcg_has_work(void);
   1316 
   1317 int qemu_calculate_timeout(void)
   1318 {
   1319 #ifndef CONFIG_IOTHREAD
   1320     int timeout;
   1321 
   1322     if (!vm_running)
   1323         timeout = 5000;
   1324     else if (tcg_has_work())
   1325         timeout = 0;
   1326     else if (!use_icount) {
   1327 #ifdef WIN32
   1328         /* This corresponds to the case where the emulated system is
   1329          * totally idle and waiting for i/o. The problem is that on
   1330          * Windows, the default value will prevent Windows user events
   1331          * to be delivered in less than 5 seconds.
   1332          *
   1333          * Upstream contains a different way to handle this, for now
   1334          * this hack should be sufficient until we integrate it into
   1335          * our tree.
   1336          */
   1337         timeout = 1000/15;  /* deliver user events every 15/th of second */
   1338 #else
   1339         timeout = 5000;
   1340 #endif
   1341     } else {
   1342      /* XXX: use timeout computed from timers */
   1343         int64_t add;
   1344         int64_t delta;
   1345         /* Advance virtual time to the next event.  */
   1346 	delta = qemu_icount_delta();
   1347         if (delta > 0) {
   1348             /* If virtual time is ahead of real time then just
   1349                wait for IO.  */
   1350             timeout = (delta + 999999) / 1000000;
   1351         } else {
   1352             /* Wait for either IO to occur or the next
   1353                timer event.  */
   1354             add = qemu_next_icount_deadline();
   1355             /* We advance the timer before checking for IO.
   1356                Limit the amount we advance so that early IO
   1357                activity won't get the guest too far ahead.  */
   1358             if (add > 10000000)
   1359                 add = 10000000;
   1360             delta += add;
   1361             qemu_icount += qemu_icount_round (add);
   1362             timeout = delta / 1000000;
   1363             if (timeout < 0)
   1364                 timeout = 0;
   1365         }
   1366     }
   1367 
   1368     return timeout;
   1369 #else /* CONFIG_IOTHREAD */
   1370     return 1000;
   1371 #endif
   1372 }
   1373 
   1374 /* Return the virtual CPU time, based on the instruction counter.  */
   1375 int64_t cpu_get_icount(void)
   1376 {
   1377     int64_t icount;
   1378     CPUState *env = cpu_single_env;;
   1379 
   1380     icount = qemu_icount;
   1381     if (env) {
   1382         if (!can_do_io(env)) {
   1383             fprintf(stderr, "Bad clock read\n");
   1384         }
   1385         icount -= (env->icount_decr.u16.low + env->icount_extra);
   1386     }
   1387     return qemu_icount_bias + (icount << icount_time_shift);
   1388 }
   1389