diff options
Diffstat (limited to 'kernel/posix-cpu-timers.c')
-rw-r--r-- | kernel/posix-cpu-timers.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index 8e5d9a68b022..bece7c0b67b2 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
@@ -18,7 +18,7 @@ void update_rlimit_cpu(unsigned long rlim_new) | |||
18 | 18 | ||
19 | cputime = secs_to_cputime(rlim_new); | 19 | cputime = secs_to_cputime(rlim_new); |
20 | if (cputime_eq(current->signal->it_prof_expires, cputime_zero) || | 20 | if (cputime_eq(current->signal->it_prof_expires, cputime_zero) || |
21 | cputime_lt(current->signal->it_prof_expires, cputime)) { | 21 | cputime_gt(current->signal->it_prof_expires, cputime)) { |
22 | spin_lock_irq(¤t->sighand->siglock); | 22 | spin_lock_irq(¤t->sighand->siglock); |
23 | set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL); | 23 | set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL); |
24 | spin_unlock_irq(¤t->sighand->siglock); | 24 | spin_unlock_irq(¤t->sighand->siglock); |
@@ -224,7 +224,7 @@ static int cpu_clock_sample(const clockid_t which_clock, struct task_struct *p, | |||
224 | cpu->cpu = virt_ticks(p); | 224 | cpu->cpu = virt_ticks(p); |
225 | break; | 225 | break; |
226 | case CPUCLOCK_SCHED: | 226 | case CPUCLOCK_SCHED: |
227 | cpu->sched = p->se.sum_exec_runtime + task_delta_exec(p); | 227 | cpu->sched = task_sched_runtime(p); |
228 | break; | 228 | break; |
229 | } | 229 | } |
230 | return 0; | 230 | return 0; |
@@ -305,18 +305,19 @@ static int cpu_clock_sample_group(const clockid_t which_clock, | |||
305 | { | 305 | { |
306 | struct task_cputime cputime; | 306 | struct task_cputime cputime; |
307 | 307 | ||
308 | thread_group_cputime(p, &cputime); | ||
309 | switch (CPUCLOCK_WHICH(which_clock)) { | 308 | switch (CPUCLOCK_WHICH(which_clock)) { |
310 | default: | 309 | default: |
311 | return -EINVAL; | 310 | return -EINVAL; |
312 | case CPUCLOCK_PROF: | 311 | case CPUCLOCK_PROF: |
312 | thread_group_cputime(p, &cputime); | ||
313 | cpu->cpu = cputime_add(cputime.utime, cputime.stime); | 313 | cpu->cpu = cputime_add(cputime.utime, cputime.stime); |
314 | break; | 314 | break; |
315 | case CPUCLOCK_VIRT: | 315 | case CPUCLOCK_VIRT: |
316 | thread_group_cputime(p, &cputime); | ||
316 | cpu->cpu = cputime.utime; | 317 | cpu->cpu = cputime.utime; |
317 | break; | 318 | break; |
318 | case CPUCLOCK_SCHED: | 319 | case CPUCLOCK_SCHED: |
319 | cpu->sched = cputime.sum_exec_runtime + task_delta_exec(p); | 320 | cpu->sched = thread_group_sched_runtime(p); |
320 | break; | 321 | break; |
321 | } | 322 | } |
322 | return 0; | 323 | return 0; |
@@ -1419,19 +1420,19 @@ void run_posix_cpu_timers(struct task_struct *tsk) | |||
1419 | * timer call will interfere. | 1420 | * timer call will interfere. |
1420 | */ | 1421 | */ |
1421 | list_for_each_entry_safe(timer, next, &firing, it.cpu.entry) { | 1422 | list_for_each_entry_safe(timer, next, &firing, it.cpu.entry) { |
1422 | int firing; | 1423 | int cpu_firing; |
1424 | |||
1423 | spin_lock(&timer->it_lock); | 1425 | spin_lock(&timer->it_lock); |
1424 | list_del_init(&timer->it.cpu.entry); | 1426 | list_del_init(&timer->it.cpu.entry); |
1425 | firing = timer->it.cpu.firing; | 1427 | cpu_firing = timer->it.cpu.firing; |
1426 | timer->it.cpu.firing = 0; | 1428 | timer->it.cpu.firing = 0; |
1427 | /* | 1429 | /* |
1428 | * The firing flag is -1 if we collided with a reset | 1430 | * The firing flag is -1 if we collided with a reset |
1429 | * of the timer, which already reported this | 1431 | * of the timer, which already reported this |
1430 | * almost-firing as an overrun. So don't generate an event. | 1432 | * almost-firing as an overrun. So don't generate an event. |
1431 | */ | 1433 | */ |
1432 | if (likely(firing >= 0)) { | 1434 | if (likely(cpu_firing >= 0)) |
1433 | cpu_timer_fire(timer); | 1435 | cpu_timer_fire(timer); |
1434 | } | ||
1435 | spin_unlock(&timer->it_lock); | 1436 | spin_unlock(&timer->it_lock); |
1436 | } | 1437 | } |
1437 | } | 1438 | } |