diff options
author | Alex Bligh <alex@alex.org.uk> | 2013-08-21 16:02:48 +0100 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2013-08-22 19:10:27 +0200 |
commit | 754d6a544d044bddeef87e9a63b4f511f59f3c4e (patch) | |
tree | 294e47851b21c481259cc0dcf197a4c6237ddcc6 /include | |
parent | 6a1751b7aad6e38e9d1ae6bcea72fa28bf6cc5fb (diff) |
aio / timers: Add QEMUTimerListGroup and helper functions
Add QEMUTimerListGroup and helper functions, to represent
a QEMUTimerList associated with each clock. Add a default
QEMUTimerListGroup representing the default timer lists
which are not associated with any other object (e.g.
an AioContext as added by future patches).
Signed-off-by: Alex Bligh <alex@alex.org.uk>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/qemu/timer.h | 49 | ||||
-rw-r--r-- | include/qemu/typedefs.h | 1 |
2 files changed, 50 insertions, 0 deletions
diff --git a/include/qemu/timer.h b/include/qemu/timer.h index d4b643f20e..6f1ec76a57 100644 --- a/include/qemu/timer.h +++ b/include/qemu/timer.h @@ -53,6 +53,11 @@ typedef enum { typedef struct QEMUClock QEMUClock; typedef struct QEMUTimerList QEMUTimerList; + +struct QEMUTimerListGroup { + QEMUTimerList *tl[QEMU_CLOCK_MAX]; +}; + typedef void QEMUTimerCB(void *opaque); struct QEMUTimer { @@ -64,6 +69,7 @@ struct QEMUTimer { int scale; }; +extern QEMUTimerListGroup main_loop_tlg; extern QEMUClock *qemu_clocks[QEMU_CLOCK_MAX]; /** @@ -218,6 +224,49 @@ QEMUClock *timerlist_get_clock(QEMUTimerList *timer_list); bool timerlist_run_timers(QEMUTimerList *timer_list); /** + * timerlistgroup_init: + * @tlg: the timer list group + * + * Initialise a timer list group. This must already be + * allocated in memory and zeroed. + */ +void timerlistgroup_init(QEMUTimerListGroup *tlg); + +/** + * timerlistgroup_deinit: + * @tlg: the timer list group + * + * Deinitialise a timer list group. This must already be + * initialised. Note the memory is not freed. + */ +void timerlistgroup_deinit(QEMUTimerListGroup *tlg); + +/** + * timerlistgroup_run_timers: + * @tlg: the timer list group + * + * Run the timers associated with a timer list group. + * This will run timers on multiple clocks. + * + * Returns: true if any timer callback ran + */ +bool timerlistgroup_run_timers(QEMUTimerListGroup *tlg); + +/** + * timerlistgroup_deadline_ns + * @tlg: the timer list group + * + * Determine the deadline of the soonest timer to + * expire associated with any timer list linked to + * the timer list group. Only clocks suitable for + * deadline calculation are included. + * + * Returns: the deadline in nanoseconds or -1 if no + * timers are to expire. + */ +int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg); + +/** * qemu_timeout_ns_to_ms: * @ns: nanosecond timeout value * diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index cae94ff57e..3205540059 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -4,6 +4,7 @@ /* A load of opaque types so that device init declarations don't have to pull in all the real definitions. */ typedef struct QEMUTimer QEMUTimer; +typedef struct QEMUTimerListGroup QEMUTimerListGroup; typedef struct QEMUFile QEMUFile; typedef struct QEMUBH QEMUBH; |