mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[PATCH] posix-cpu-timers: fix overrun reporting
This change corrects an omission in posix_cpu_timer_schedule, so that it correctly propagates the overrun calculation to where it will get reported to the user. Signed-off-by: Roland McGrath <roland@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a241ec65ae
commit
708f430dcc
1 changed files with 10 additions and 6 deletions
|
@ -1225,7 +1225,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
|
||||||
/*
|
/*
|
||||||
* The task was cleaned up already, no future firings.
|
* The task was cleaned up already, no future firings.
|
||||||
*/
|
*/
|
||||||
return;
|
goto out;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fetch the current sample and update the timer's expiry time.
|
* Fetch the current sample and update the timer's expiry time.
|
||||||
|
@ -1235,7 +1235,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
|
||||||
bump_cpu_timer(timer, now);
|
bump_cpu_timer(timer, now);
|
||||||
if (unlikely(p->exit_state)) {
|
if (unlikely(p->exit_state)) {
|
||||||
clear_dead_task(timer, now);
|
clear_dead_task(timer, now);
|
||||||
return;
|
goto out;
|
||||||
}
|
}
|
||||||
read_lock(&tasklist_lock); /* arm_timer needs it. */
|
read_lock(&tasklist_lock); /* arm_timer needs it. */
|
||||||
} else {
|
} else {
|
||||||
|
@ -1248,8 +1248,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
|
||||||
put_task_struct(p);
|
put_task_struct(p);
|
||||||
timer->it.cpu.task = p = NULL;
|
timer->it.cpu.task = p = NULL;
|
||||||
timer->it.cpu.expires.sched = 0;
|
timer->it.cpu.expires.sched = 0;
|
||||||
read_unlock(&tasklist_lock);
|
goto out_unlock;
|
||||||
return;
|
|
||||||
} else if (unlikely(p->exit_state) && thread_group_empty(p)) {
|
} else if (unlikely(p->exit_state) && thread_group_empty(p)) {
|
||||||
/*
|
/*
|
||||||
* We've noticed that the thread is dead, but
|
* We've noticed that the thread is dead, but
|
||||||
|
@ -1257,8 +1256,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
|
||||||
* drop our task ref.
|
* drop our task ref.
|
||||||
*/
|
*/
|
||||||
clear_dead_task(timer, now);
|
clear_dead_task(timer, now);
|
||||||
read_unlock(&tasklist_lock);
|
goto out_unlock;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
cpu_clock_sample_group(timer->it_clock, p, &now);
|
cpu_clock_sample_group(timer->it_clock, p, &now);
|
||||||
bump_cpu_timer(timer, now);
|
bump_cpu_timer(timer, now);
|
||||||
|
@ -1270,7 +1268,13 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
|
||||||
*/
|
*/
|
||||||
arm_timer(timer, now);
|
arm_timer(timer, now);
|
||||||
|
|
||||||
|
out_unlock:
|
||||||
read_unlock(&tasklist_lock);
|
read_unlock(&tasklist_lock);
|
||||||
|
|
||||||
|
out:
|
||||||
|
timer->it_overrun_last = timer->it_overrun;
|
||||||
|
timer->it_overrun = -1;
|
||||||
|
++timer->it_requeue_pending;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue