diff mbox

[RFC,PATCHv8,16/30] aio / timers: On timer modification, qemu_notify or aio_notify

Message ID 1375998147-24292-17-git-send-email-alex@alex.org.uk
State New
Headers show

Commit Message

Alex Bligh Aug. 8, 2013, 9:42 p.m. UTC
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: Alex Bligh <alex@alex.org.uk>
---
 include/qemu/timer.h |    9 +++++++++
 qemu-timer.c         |   13 ++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

Comments

Paolo Bonzini Aug. 9, 2013, 10:08 a.m. UTC | #1
Il 08/08/2013 23:42, Alex Bligh ha scritto:
> 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: Alex Bligh <alex@alex.org.uk>

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

> ---
>  include/qemu/timer.h |    9 +++++++++
>  qemu-timer.c         |   13 ++++++++++---
>  2 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/include/qemu/timer.h b/include/qemu/timer.h
> index 07e6d9e..68f76df 100644
> --- a/include/qemu/timer.h
> +++ b/include/qemu/timer.h
> @@ -122,6 +122,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
>   *
> diff --git a/qemu-timer.c b/qemu-timer.c
> index 14cb433..4b162e1 100644
> --- a/qemu-timer.c
> +++ b/qemu-timer.c
> @@ -307,11 +307,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);
>      }
>  }
> @@ -535,9 +544,7 @@ 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);
> -        }
> +        timerlist_notify(ts->timer_list);
>      }
>  }
>  
>
diff mbox

Patch

diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index 07e6d9e..68f76df 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -122,6 +122,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
  *
diff --git a/qemu-timer.c b/qemu-timer.c
index 14cb433..4b162e1 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -307,11 +307,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);
     }
 }
@@ -535,9 +544,7 @@  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);
-        }
+        timerlist_notify(ts->timer_list);
     }
 }