]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - kernel/posix-cpu-timers.c
mm: sched: numa: fix NUMA balancing when !SCHED_DEBUG
[karo-tx-linux.git] / kernel / posix-cpu-timers.c
index 92a4fbf44f86960477ab9835ed68cde568a87c06..c7f31aa272f74276d9d4c37d669303ba43ec1dce 100644 (file)
@@ -404,14 +404,8 @@ static void cleanup_timers_list(struct list_head *head,
 {
        struct cpu_timer_list *timer, *next;
 
-       list_for_each_entry_safe(timer, next, head, entry) {
+       list_for_each_entry_safe(timer, next, head, entry)
                list_del_init(&timer->entry);
-               if (timer->expires < curr) {
-                       timer->expires = 0;
-               } else {
-                       timer->expires -= curr;
-               }
-       }
 }
 
 /*
@@ -459,15 +453,21 @@ void posix_cpu_timers_exit_group(struct task_struct *tsk)
                       tsk->se.sum_exec_runtime + sig->sum_sched_runtime);
 }
 
-static void clear_dead_task(struct k_itimer *timer, unsigned long long now)
+static void clear_dead_task(struct k_itimer *itimer, unsigned long long now)
 {
+       struct cpu_timer_list *timer = &itimer->it.cpu;
+
        /*
         * That's all for this thread or process.
         * We leave our residual in expires to be reported.
         */
-       put_task_struct(timer->it.cpu.task);
-       timer->it.cpu.task = NULL;
-       timer->it.cpu.expires -= now;
+       put_task_struct(timer->task);
+       timer->task = NULL;
+       if (timer->expires < now) {
+               timer->expires = 0;
+       } else {
+               timer->expires -= now;
+       }
 }
 
 static inline int expires_gt(cputime_t expires, cputime_t new_exp)
@@ -1097,6 +1097,7 @@ void posix_cpu_timer_schedule(struct k_itimer *timer)
                         * not yet reaped.  Take this opportunity to
                         * drop our task ref.
                         */
+                       cpu_timer_sample_group(timer->it_clock, p, &now);
                        clear_dead_task(timer, now);
                        goto out_unlock;
                }