Commit b1bbfe72 authored by Alex Bligh's avatar Alex Bligh Committed by Stefan Hajnoczi
Browse files

aio / timers: On timer modification, qemu_notify or aio_notify



On qemu_mod_timer_ns, ensure qemu_notify or aio_notify is called to
end the appropriate poll(), irrespective of use_icount value.

On qemu_clock_enable, ensure qemu_notify or aio_notify is called for
all QEMUTimerLists attached to the QEMUClock.

Signed-off-by: default avatarAlex Bligh <alex@alex.org.uk>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 7b595f35
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -135,6 +135,15 @@ bool qemu_clock_use_for_deadline(QEMUClock *clock);
 */
QEMUTimerList *qemu_clock_get_main_loop_timerlist(QEMUClock *clock);

/**
 * qemu_clock_nofify:
 * @clock: the clock to operate on
 *
 * Call the notifier callback connected with the default timer
 * list linked to the clock, or qemu_notify() if none.
 */
void qemu_clock_notify(QEMUClock *clock);

/**
 * timerlist_new:
 * @type: the clock type to associate with the timerlist
+10 −3
Original line number Diff line number Diff line
@@ -304,11 +304,20 @@ bool qemu_clock_use_for_deadline(QEMUClock *clock)
    return !(use_icount && (clock->type == QEMU_CLOCK_VIRTUAL));
}

void qemu_clock_notify(QEMUClock *clock)
{
    QEMUTimerList *timer_list;
    QLIST_FOREACH(timer_list, &clock->timerlists, list) {
        timerlist_notify(timer_list);
    }
}

void qemu_clock_enable(QEMUClock *clock, bool enabled)
{
    bool old = clock->enabled;
    clock->enabled = enabled;
    if (enabled && !old) {
        qemu_clock_notify(clock);
        qemu_rearm_alarm_timer(alarm_timer);
    }
}
@@ -522,11 +531,9 @@ void qemu_mod_timer_ns(QEMUTimer *ts, int64_t expire_time)
        }
        /* Interrupt execution to force deadline recalculation.  */
        qemu_clock_warp(ts->timer_list->clock);
        if (use_icount) {
        timerlist_notify(ts->timer_list);
    }
}
}

void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
{