Patchwork [v2,4/5] qemu_next_alarm_deadline: check the expire time of a clock only if it is enabled

login
register
mail settings
Submitter Stefano Stabellini
Date Jan. 27, 2012, 12:26 p.m.
Message ID <1327667215-5411-4-git-send-email-stefano.stabellini@eu.citrix.com>
Download mbox | patch
Permalink /patch/138216/
State New
Headers show

Comments

Stefano Stabellini - Jan. 27, 2012, 12:26 p.m.
Also delta in qemu_next_alarm_deadline is a 64 bit value so set the
default to INT64_MAX instead of INT32_MAX.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 qemu-timer.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)
Paolo Bonzini - Jan. 27, 2012, 2:42 p.m.
On 01/27/2012 01:26 PM, Stefano Stabellini wrote:
> Also delta in qemu_next_alarm_deadline is a 64 bit value so set the
> default to INT64_MAX instead of INT32_MAX.
>
> Signed-off-by: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
> ---
>   qemu-timer.c |   10 ++++------
>   1 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/qemu-timer.c b/qemu-timer.c
> index cd026c6..648db1d 100644
> --- a/qemu-timer.c
> +++ b/qemu-timer.c
> @@ -106,23 +106,21 @@ static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
>
>   static int64_t qemu_next_alarm_deadline(void)
>   {
> -    int64_t delta;
> +    int64_t delta = INT64_MAX;

I'm worried of overflows elsewhere...

>       int64_t rtdelta;
>
> -    if (!use_icount&&  vm_clock->active_timers) {
> +    if (!use_icount&&  vm_clock->enabled&&  vm_clock->active_timers) {
>           delta = vm_clock->active_timers->expire_time -
>                        qemu_get_clock_ns(vm_clock);
> -    } else {
> -        delta = INT32_MAX;
>       }
> -    if (host_clock->active_timers) {
> +    if (host_clock->enabled&&  host_clock->active_timers) {
>           int64_t hdelta = host_clock->active_timers->expire_time -
>                    qemu_get_clock_ns(host_clock);
>           if (hdelta<  delta) {
>               delta = hdelta;
>           }
>       }
> -    if (rt_clock->active_timers) {
> +    if (rt_clock->enabled&&  rt_clock->active_timers) {
>           rtdelta = (rt_clock->active_timers->expire_time -
>                    qemu_get_clock_ns(rt_clock));
>           if (rtdelta<  delta) {

The patch is otherwise okay, but without looking more closely at the 
callers I'm not quite ready to give my Reviewed-by.

Paolo
Stefano Stabellini - Jan. 27, 2012, 3:43 p.m.
On Fri, 27 Jan 2012, Paolo Bonzini wrote:
> On 01/27/2012 01:26 PM, Stefano Stabellini wrote:
> > Also delta in qemu_next_alarm_deadline is a 64 bit value so set the
> > default to INT64_MAX instead of INT32_MAX.
> >
> > Signed-off-by: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
> > ---
> >   qemu-timer.c |   10 ++++------
> >   1 files changed, 4 insertions(+), 6 deletions(-)
> >
> > diff --git a/qemu-timer.c b/qemu-timer.c
> > index cd026c6..648db1d 100644
> > --- a/qemu-timer.c
> > +++ b/qemu-timer.c
> > @@ -106,23 +106,21 @@ static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
> >
> >   static int64_t qemu_next_alarm_deadline(void)
> >   {
> > -    int64_t delta;
> > +    int64_t delta = INT64_MAX;
> 
> I'm worried of overflows elsewhere...

I think that you are right: mm_rearm_timer and win32_rearm_timer would
overflow.
I'll just repost the patch using INT32_MAX.
Stefano Stabellini - Jan. 27, 2012, 3:53 p.m.
On Fri, 27 Jan 2012, Stefano Stabellini wrote:
> On Fri, 27 Jan 2012, Paolo Bonzini wrote:
> > On 01/27/2012 01:26 PM, Stefano Stabellini wrote:
> > > Also delta in qemu_next_alarm_deadline is a 64 bit value so set the
> > > default to INT64_MAX instead of INT32_MAX.
> > >
> > > Signed-off-by: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
> > > ---
> > >   qemu-timer.c |   10 ++++------
> > >   1 files changed, 4 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/qemu-timer.c b/qemu-timer.c
> > > index cd026c6..648db1d 100644
> > > --- a/qemu-timer.c
> > > +++ b/qemu-timer.c
> > > @@ -106,23 +106,21 @@ static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
> > >
> > >   static int64_t qemu_next_alarm_deadline(void)
> > >   {
> > > -    int64_t delta;
> > > +    int64_t delta = INT64_MAX;
> > 
> > I'm worried of overflows elsewhere...
> 
> I think that you are right: mm_rearm_timer and win32_rearm_timer would
> overflow.
> I'll just repost the patch using INT32_MAX.
 
Actually it is better to fix mm_rearm_timer and win32_rearm_timer so
that they won't overflow anymore.
I'll add a patch to do that.

Patch

diff --git a/qemu-timer.c b/qemu-timer.c
index cd026c6..648db1d 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -106,23 +106,21 @@  static inline int alarm_has_dynticks(struct qemu_alarm_timer *t)
 
 static int64_t qemu_next_alarm_deadline(void)
 {
-    int64_t delta;
+    int64_t delta = INT64_MAX;
     int64_t rtdelta;
 
-    if (!use_icount && vm_clock->active_timers) {
+    if (!use_icount && vm_clock->enabled && vm_clock->active_timers) {
         delta = vm_clock->active_timers->expire_time -
                      qemu_get_clock_ns(vm_clock);
-    } else {
-        delta = INT32_MAX;
     }
-    if (host_clock->active_timers) {
+    if (host_clock->enabled && host_clock->active_timers) {
         int64_t hdelta = host_clock->active_timers->expire_time -
                  qemu_get_clock_ns(host_clock);
         if (hdelta < delta) {
             delta = hdelta;
         }
     }
-    if (rt_clock->active_timers) {
+    if (rt_clock->enabled && rt_clock->active_timers) {
         rtdelta = (rt_clock->active_timers->expire_time -
                  qemu_get_clock_ns(rt_clock));
         if (rtdelta < delta) {