Commit b99dc0d1a4d395bad649ef25abe21c5f076787a5

Authored by balrog
1 parent b01bcae6

Redundant timer rearm optimisation by Anders Melchiorsen.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3823 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 11 additions and 1 deletions
... ... @@ -822,6 +822,7 @@ struct qemu_alarm_timer {
822 822 };
823 823  
824 824 #define ALARM_FLAG_DYNTICKS 0x1
  825 +#define ALARM_FLAG_MODIFIED 0x2
825 826  
826 827 static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
827 828 {
... ... @@ -833,6 +834,11 @@ static void qemu_rearm_alarm_timer(struct qemu_alarm_timer *t)
833 834 if (!alarm_has_dynticks(t))
834 835 return;
835 836  
  837 + if (!(t->flags & ALARM_FLAG_MODIFIED))
  838 + return;
  839 +
  840 + t->flags &= ~(ALARM_FLAG_MODIFIED);
  841 +
836 842 t->rearm(t);
837 843 }
838 844  
... ... @@ -995,6 +1001,8 @@ void qemu_del_timer(QEMUTimer *ts)
995 1001 {
996 1002 QEMUTimer **pt, *t;
997 1003  
  1004 + alarm_timer->flags |= ALARM_FLAG_MODIFIED;
  1005 +
998 1006 /* NOTE: this code must be signal safe because
999 1007 qemu_timer_expired() can be called from a signal. */
1000 1008 pt = &active_timers[ts->clock->type];
... ... @@ -1067,7 +1075,6 @@ static void qemu_run_timers(QEMUTimer **ptimer_head, int64_t current_time)
1067 1075 /* run the callback (the timer list can be modified) */
1068 1076 ts->cb(ts->opaque);
1069 1077 }
1070   - qemu_rearm_alarm_timer(alarm_timer);
1071 1078 }
1072 1079  
1073 1080 int64_t qemu_get_clock(QEMUClock *clock)
... ... @@ -1187,6 +1194,7 @@ static void host_alarm_handler(int host_signum)
1187 1194 CPUState *env = next_cpu;
1188 1195  
1189 1196 if (env) {
  1197 + alarm_timer->flags |= ALARM_FLAG_MODIFIED;
1190 1198 /* stop the currently executing cpu because a timer occured */
1191 1199 cpu_interrupt(env, CPU_INTERRUPT_EXIT);
1192 1200 #ifdef USE_KQEMU
... ... @@ -7364,6 +7372,8 @@ void main_loop_wait(int timeout)
7364 7372 qemu_run_timers(&active_timers[QEMU_TIMER_REALTIME],
7365 7373 qemu_get_clock(rt_clock));
7366 7374  
  7375 + qemu_rearm_alarm_timer(alarm_timer);
  7376 +
7367 7377 /* Check bottom-halves last in case any of the earlier events triggered
7368 7378 them. */
7369 7379 qemu_bh_poll();
... ...