From: Xuebing Wang <xbing6@gmail.com>
To: qemu-devel@nongnu.org, pbonzini@redhat.com, stefanha@redhat.com
Cc: xbing6@gmail.com
Subject: [Qemu-devel] [PULL 3/7] timer: move QEMUClockType related functions together
Date: Mon, 3 Mar 2014 09:43:36 +0800 [thread overview]
Message-ID: <1393811020-24881-4-git-send-email-xbing6@gmail.com> (raw)
In-Reply-To: <1393811020-24881-1-git-send-email-xbing6@gmail.com>
Signed-off-by: Xuebing Wang <xbing6@gmail.com>
Reviewed-By: Alex Bligh <alex@alex.org.uk>
---
qemu-timer.c | 160 ++++++++++++++++++++++++++++++----------------------------
1 file changed, 82 insertions(+), 78 deletions(-)
diff --git a/qemu-timer.c b/qemu-timer.c
index 2db87ba..471150c 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -314,6 +314,10 @@ static void timerlist_rearm(QEMUTimerList *timer_list)
timerlist_notify(timer_list);
}
+/*
+ * QEMUClockType
+ */
+
static void qemu_clock_init(QEMUClockType type)
{
QEMUClock *clock = qemu_clock_ptr(type);
@@ -326,11 +330,71 @@ static void qemu_clock_init(QEMUClockType type)
main_loop_tlg.tl[type] = timerlist_new(type, NULL, NULL);
}
+int64_t qemu_clock_get_ns(QEMUClockType type)
+{
+ int64_t now, last;
+ QEMUClock *clock = qemu_clock_ptr(type);
+
+ switch (type) {
+ case QEMU_CLOCK_REALTIME:
+ return get_clock();
+ default:
+ case QEMU_CLOCK_VIRTUAL:
+ if (use_icount) {
+ return cpu_get_icount();
+ } else {
+ return cpu_get_clock();
+ }
+ case QEMU_CLOCK_HOST:
+ now = get_clock_realtime();
+ last = clock->last;
+ clock->last = now;
+ if (now < last) {
+ notifier_list_notify(&clock->reset_notifiers, &now);
+ }
+ return now;
+ }
+}
+
+bool qemu_clock_has_timers(QEMUClockType type)
+{
+ return timerlist_has_timers(
+ main_loop_tlg.tl[type]);
+}
+
+bool qemu_clock_expired(QEMUClockType type)
+{
+ return timerlist_expired(
+ main_loop_tlg.tl[type]);
+}
+
bool qemu_clock_use_for_deadline(QEMUClockType type)
{
return !(use_icount && (type == QEMU_CLOCK_VIRTUAL));
}
+/* Calculate the soonest deadline across all timerlists attached
+ * to the clock. This is used for the icount timeout so we
+ * ignore whether or not the clock should be used in deadline
+ * calculations.
+ */
+int64_t qemu_clock_deadline_ns_all(QEMUClockType type)
+{
+ int64_t deadline = -1;
+ QEMUTimerList *timer_list;
+ QEMUClock *clock = qemu_clock_ptr(type);
+ QLIST_FOREACH(timer_list, &clock->timerlists, list) {
+ deadline = qemu_soonest_timeout(deadline,
+ timerlist_deadline_ns(timer_list));
+ }
+ return deadline;
+}
+
+QEMUTimerList *qemu_clock_get_main_loop_timerlist(QEMUClockType type)
+{
+ return main_loop_tlg.tl[type];
+}
+
void qemu_clock_notify(QEMUClockType type)
{
QEMUTimerList *timer_list;
@@ -362,38 +426,34 @@ void qemu_clock_enable(QEMUClockType type, bool enabled)
}
}
-bool qemu_clock_has_timers(QEMUClockType type)
+void qemu_clock_register_reset_notifier(QEMUClockType type,
+ Notifier *notifier)
{
- return timerlist_has_timers(
- main_loop_tlg.tl[type]);
+ QEMUClock *clock = qemu_clock_ptr(type);
+ notifier_list_add(&clock->reset_notifiers, notifier);
}
-bool qemu_clock_expired(QEMUClockType type)
+void qemu_clock_unregister_reset_notifier(QEMUClockType type,
+ Notifier *notifier)
{
- return timerlist_expired(
- main_loop_tlg.tl[type]);
+ notifier_remove(notifier);
}
-/* Calculate the soonest deadline across all timerlists attached
- * to the clock. This is used for the icount timeout so we
- * ignore whether or not the clock should be used in deadline
- * calculations.
- */
-int64_t qemu_clock_deadline_ns_all(QEMUClockType type)
+bool qemu_clock_run_timers(QEMUClockType type)
{
- int64_t deadline = -1;
- QEMUTimerList *timer_list;
- QEMUClock *clock = qemu_clock_ptr(type);
- QLIST_FOREACH(timer_list, &clock->timerlists, list) {
- deadline = qemu_soonest_timeout(deadline,
- timerlist_deadline_ns(timer_list));
- }
- return deadline;
+ return timerlist_run_timers(main_loop_tlg.tl[type]);
}
-QEMUTimerList *qemu_clock_get_main_loop_timerlist(QEMUClockType type)
+bool qemu_clock_run_all_timers(void)
{
- return main_loop_tlg.tl[type];
+ bool progress = false;
+ QEMUClockType type;
+
+ for (type = 0; type < QEMU_CLOCK_MAX; type++) {
+ progress |= qemu_clock_run_timers(type);
+ }
+
+ return progress;
}
/* Transition function to convert a nanosecond timeout to ms
@@ -570,11 +630,6 @@ bool timer_expired(QEMUTimer *timer_head, int64_t current_time)
return timer_expired_ns(timer_head, current_time * timer_head->scale);
}
-bool qemu_clock_run_timers(QEMUClockType type)
-{
- return timerlist_run_timers(main_loop_tlg.tl[type]);
-}
-
void timerlistgroup_init(QEMUTimerListGroup *tlg,
QEMUTimerListNotifyCB *cb, void *opaque)
{
@@ -616,45 +671,6 @@ int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg)
return deadline;
}
-int64_t qemu_clock_get_ns(QEMUClockType type)
-{
- int64_t now, last;
- QEMUClock *clock = qemu_clock_ptr(type);
-
- switch (type) {
- case QEMU_CLOCK_REALTIME:
- return get_clock();
- default:
- case QEMU_CLOCK_VIRTUAL:
- if (use_icount) {
- return cpu_get_icount();
- } else {
- return cpu_get_clock();
- }
- case QEMU_CLOCK_HOST:
- now = get_clock_realtime();
- last = clock->last;
- clock->last = now;
- if (now < last) {
- notifier_list_notify(&clock->reset_notifiers, &now);
- }
- return now;
- }
-}
-
-void qemu_clock_register_reset_notifier(QEMUClockType type,
- Notifier *notifier)
-{
- QEMUClock *clock = qemu_clock_ptr(type);
- notifier_list_add(&clock->reset_notifiers, notifier);
-}
-
-void qemu_clock_unregister_reset_notifier(QEMUClockType type,
- Notifier *notifier)
-{
- notifier_remove(notifier);
-}
-
void init_clocks(void)
{
QEMUClockType type;
@@ -671,15 +687,3 @@ uint64_t timer_expire_time_ns(QEMUTimer *ts)
{
return timer_pending(ts) ? ts->expire_time : -1;
}
-
-bool qemu_clock_run_all_timers(void)
-{
- bool progress = false;
- QEMUClockType type;
-
- for (type = 0; type < QEMU_CLOCK_MAX; type++) {
- progress |= qemu_clock_run_timers(type);
- }
-
- return progress;
-}
--
1.7.9.5
next prev parent reply other threads:[~2014-03-03 1:44 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-03 1:43 [Qemu-devel] [PULL 0/7] refactor timer Xuebing Wang
2014-03-03 1:43 ` [Qemu-devel] [PULL 1/7] timer: move QEMUTimerList functions together Xuebing Wang
2014-03-03 1:43 ` [Qemu-devel] [PULL 2/7] timer: make QEMUTimerList functions private (remove from APIs) Xuebing Wang
2014-03-03 1:43 ` Xuebing Wang [this message]
2014-03-03 1:43 ` [Qemu-devel] [PULL 4/7] timer: move QEMUTimerListGroup function to be below QEMUClockType Xuebing Wang
2014-03-03 1:43 ` [Qemu-devel] [PULL 5/7] timer: move QEMUTimer related functions together Xuebing Wang
2014-03-03 1:43 ` [Qemu-devel] [PULL 6/7] timer: move general utility " Xuebing Wang
2014-03-03 1:43 ` [Qemu-devel] [PULL 7/7] timer: clean unnecessary #include and use minimal required #include Xuebing Wang
2014-03-07 12:03 ` [Qemu-devel] [PULL 0/7] refactor timer Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1393811020-24881-4-git-send-email-xbing6@gmail.com \
--to=xbing6@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).