Messages in this thread | | | Date | Tue, 8 Jul 2014 08:42:04 +0200 | From | Richard Cochran <> | Subject | Re: [PATCH] alarmtimer: Fix bug where relative alarm timers were treated as absolute |
| |
On Mon, Jul 07, 2014 at 02:06:11PM -0700, John Stultz wrote: > @@ -597,8 +602,16 @@ static int alarm_timer_set(struct k_itimer *timr, int flags, > > /* start the timer */ > timr->it.alarm.interval = timespec_to_ktime(new_setting->it_interval); > - alarm_start(&timr->it.alarm.alarmtimer, > - timespec_to_ktime(new_setting->it_value)); > + exp = timespec_to_ktime(new_setting->it_value); > + /* Convert (if necessary) to absolute time */ > + if (flags != TIMER_ABSTIME) { > + ktime_t now; > + > + now = alarm_bases[timr->it.alarm.alarmtimer.type].gettime(); > + exp = ktime_add(now, exp); > + } > + > + alarm_start(&timr->it.alarm.alarmtimer, exp);
Nothing protects 'exp' from becoming invalid before queuing the alarm, if the time base is reset on another cpu. Or would that be harmless here?
> return 0; > }
Thanks, Richard
| |