mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] posix-cpu-timers: fix overrun reporting
@ 2005-10-24  5:01 Roland McGrath
  0 siblings, 0 replies; only message in thread
From: Roland McGrath @ 2005-10-24  5:01 UTC (permalink / raw)
  To: Linus Torvalds, Andrew Morton; +Cc: Oleg Nesterov, linux-kernel


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>

---

 kernel/posix-cpu-timers.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

4da6a042f1fe3a10265f4cb444c464c16644f814
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c
--- a/kernel/posix-cpu-timers.c
+++ b/kernel/posix-cpu-timers.c
@@ -1223,7 +1223,7 @@ void posix_cpu_timer_schedule(struct k_i
 		/*
 		 * The task was cleaned up already, no future firings.
 		 */
-		return;
+		goto out;
 
 	/*
 	 * Fetch the current sample and update the timer's expiry time.
@@ -1233,7 +1233,7 @@ void posix_cpu_timer_schedule(struct k_i
 		bump_cpu_timer(timer, now);
 		if (unlikely(p->exit_state)) {
 			clear_dead_task(timer, now);
-			return;
+			goto out;
 		}
 		read_lock(&tasklist_lock); /* arm_timer needs it.  */
 	} else {
@@ -1246,8 +1246,7 @@ void posix_cpu_timer_schedule(struct k_i
 			put_task_struct(p);
 			timer->it.cpu.task = p = NULL;
 			timer->it.cpu.expires.sched = 0;
-			read_unlock(&tasklist_lock);
-			return;
+			goto out_unlock;
 		} else if (unlikely(p->exit_state) && thread_group_empty(p)) {
 			/*
 			 * We've noticed that the thread is dead, but
@@ -1255,8 +1254,7 @@ void posix_cpu_timer_schedule(struct k_i
 			 * drop our task ref.
 			 */
 			clear_dead_task(timer, now);
-			read_unlock(&tasklist_lock);
-			return;
+			goto out_unlock;
 		}
 		cpu_clock_sample_group(timer->it_clock, p, &now);
 		bump_cpu_timer(timer, now);
@@ -1268,7 +1266,13 @@ void posix_cpu_timer_schedule(struct k_i
 	 */
 	arm_timer(timer, now);
 
+out_unlock:
 	read_unlock(&tasklist_lock);
+
+out:
+	timer->it_overrun_last = timer->it_overrun;
+	timer->it_overrun = -1;
+	++timer->it_requeue_pending;
 }
 
 /*

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-10-24  5:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-24  5:01 [PATCH] posix-cpu-timers: fix overrun reporting Roland McGrath

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®