[Qemu-devel] [PATCH 1/8] timers: extract timer_mod_ns_locked and timerlist_rearm

2013-10-08 Thread Paolo Bonzini
These will be reused in timer_mod_anticipate functions.

Signed-off-by: Paolo Bonzini pbonz...@redhat.com
---
 qemu-timer.c | 51 ---
 1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/qemu-timer.c b/qemu-timer.c
index 6b62e88..95fc6eb 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -338,6 +338,34 @@ static void timer_del_locked(QEMUTimerList *timer_list, 
QEMUTimer *ts)
 }
 }
 
+static bool timer_mod_ns_locked(QEMUTimerList *timer_list,
+QEMUTimer *ts, int64_t expire_time)
+{
+QEMUTimer **pt, *t;
+
+/* add the timer in the sorted list */
+pt = timer_list-active_timers;
+for (;;) {
+t = *pt;
+if (!timer_expired_ns(t, expire_time)) {
+break;
+}
+pt = t-next;
+}
+ts-expire_time = MAX(expire_time, 0);
+ts-next = *pt;
+*pt = ts;
+
+return pt == timer_list-active_timers;
+}
+
+static void timerlist_rearm(QEMUTimerList *timer_list)
+{
+/* Interrupt execution to force deadline recalculation.  */
+qemu_clock_warp(timer_list-clock-type);
+timerlist_notify(timer_list);
+}
+
 /* stop a timer, but do not dealloc it */
 void timer_del(QEMUTimer *ts)
 {
@@ -353,30 +381,15 @@ void timer_del(QEMUTimer *ts)
 void timer_mod_ns(QEMUTimer *ts, int64_t expire_time)
 {
 QEMUTimerList *timer_list = ts-timer_list;
-QEMUTimer **pt, *t;
+bool rearm;
 
 qemu_mutex_lock(timer_list-active_timers_lock);
 timer_del_locked(timer_list, ts);
-
-/* add the timer in the sorted list */
-pt = timer_list-active_timers;
-for(;;) {
-t = *pt;
-if (!timer_expired_ns(t, expire_time)) {
-break;
-}
-pt = t-next;
-}
-ts-expire_time = MAX(expire_time, 0);
-ts-next = *pt;
-*pt = ts;
+rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
 qemu_mutex_unlock(timer_list-active_timers_lock);
 
-/* Rearm if necessary  */
-if (pt == timer_list-active_timers) {
-/* Interrupt execution to force deadline recalculation.  */
-qemu_clock_warp(timer_list-clock-type);
-timerlist_notify(timer_list);
+if (rearm) {
+timerlist_rearm(timer_list);
 }
 }
 
-- 
1.8.3.1





Re: [Qemu-devel] [PATCH 1/8] timers: extract timer_mod_ns_locked and timerlist_rearm

2013-10-08 Thread Alex Bligh

On 8 Oct 2013, at 09:47, Paolo Bonzini wrote:

 These will be reused in timer_mod_anticipate functions.
 
 Signed-off-by: Paolo Bonzini pbonz...@redhat.com
Signed-off-by: Alex Bligh a...@alex.org.uk
 ---
 qemu-timer.c | 51 ---
 1 file changed, 32 insertions(+), 19 deletions(-)
 
 diff --git a/qemu-timer.c b/qemu-timer.c
 index 6b62e88..95fc6eb 100644
 --- a/qemu-timer.c
 +++ b/qemu-timer.c
 @@ -338,6 +338,34 @@ static void timer_del_locked(QEMUTimerList *timer_list, 
 QEMUTimer *ts)
 }
 }
 
 +static bool timer_mod_ns_locked(QEMUTimerList *timer_list,
 +QEMUTimer *ts, int64_t expire_time)
 +{
 +QEMUTimer **pt, *t;
 +
 +/* add the timer in the sorted list */
 +pt = timer_list-active_timers;
 +for (;;) {
 +t = *pt;
 +if (!timer_expired_ns(t, expire_time)) {
 +break;
 +}
 +pt = t-next;
 +}
 +ts-expire_time = MAX(expire_time, 0);
 +ts-next = *pt;
 +*pt = ts;
 +
 +return pt == timer_list-active_timers;
 +}
 +
 +static void timerlist_rearm(QEMUTimerList *timer_list)
 +{
 +/* Interrupt execution to force deadline recalculation.  */
 +qemu_clock_warp(timer_list-clock-type);
 +timerlist_notify(timer_list);
 +}
 +
 /* stop a timer, but do not dealloc it */
 void timer_del(QEMUTimer *ts)
 {
 @@ -353,30 +381,15 @@ void timer_del(QEMUTimer *ts)
 void timer_mod_ns(QEMUTimer *ts, int64_t expire_time)
 {
 QEMUTimerList *timer_list = ts-timer_list;
 -QEMUTimer **pt, *t;
 +bool rearm;
 
 qemu_mutex_lock(timer_list-active_timers_lock);
 timer_del_locked(timer_list, ts);
 -
 -/* add the timer in the sorted list */
 -pt = timer_list-active_timers;
 -for(;;) {
 -t = *pt;
 -if (!timer_expired_ns(t, expire_time)) {
 -break;
 -}
 -pt = t-next;
 -}
 -ts-expire_time = MAX(expire_time, 0);
 -ts-next = *pt;
 -*pt = ts;
 +rearm = timer_mod_ns_locked(timer_list, ts, expire_time);
 qemu_mutex_unlock(timer_list-active_timers_lock);
 
 -/* Rearm if necessary  */
 -if (pt == timer_list-active_timers) {
 -/* Interrupt execution to force deadline recalculation.  */
 -qemu_clock_warp(timer_list-clock-type);
 -timerlist_notify(timer_list);
 +if (rearm) {
 +timerlist_rearm(timer_list);
 }
 }
 
 -- 
 1.8.3.1
 
 
 
 

-- 
Alex Bligh