Messages in this thread Patch in this message | | | Date | Fri, 22 May 2009 15:43:49 +0200 | From | Stanislaw Gruszka <> | Subject | [PATCH resend4 3/3] itimers: simplify arm_timer() code a bit |
| |
Don't update values in expiration cache when new ones are equal. Add expire_le() helper to simplify code. Make similar control flow on all arm_timer() function.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> --- kernel/posix-cpu-timers.c | 46 ++++++++++++++++++++++---------------------- 1 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index b60d644..ce16e22 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c @@ -541,6 +541,13 @@ static void clear_dead_task(struct k_itimer *timer, union cpu_time_count now) now); } +static inline int expires_le(cputime_t expires, cputime_t new_exp) +{ + if (!cputime_eq(expires, cputime_zero) && cputime_le(expires, new_exp)) + return 1; + return 0; +} + /* * Insert the timer on the appropriate list before any timers that * expire later. This must be called with the tasklist_lock held @@ -585,31 +592,28 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now) */ if (CPUCLOCK_PERTHREAD(timer->it_clock)) { + union cpu_time_count *exp = &nt->expires; + switch (CPUCLOCK_WHICH(timer->it_clock)) { default: BUG(); case CPUCLOCK_PROF: - if (cputime_eq(p->cputime_expires.prof_exp, - cputime_zero) || - cputime_gt(p->cputime_expires.prof_exp, - nt->expires.cpu)) - p->cputime_expires.prof_exp = - nt->expires.cpu; + if (expires_le(p->cputime_expires.prof_exp, + exp->cpu)) + break; + p->cputime_expires.prof_exp = exp->cpu; break; case CPUCLOCK_VIRT: - if (cputime_eq(p->cputime_expires.virt_exp, - cputime_zero) || - cputime_gt(p->cputime_expires.virt_exp, - nt->expires.cpu)) - p->cputime_expires.virt_exp = - nt->expires.cpu; + if (expires_le(p->cputime_expires.virt_exp, + exp->cpu)) + break; + p->cputime_expires.virt_exp = exp->cpu; break; case CPUCLOCK_SCHED: - if (p->cputime_expires.sched_exp == 0 || - p->cputime_expires.sched_exp > - nt->expires.sched) - p->cputime_expires.sched_exp = - nt->expires.sched; + if (p->cputime_expires.sched_exp == 0 && + p->cputime_expires.sched_exp <= exp->sched) + break; + p->cputime_expires.sched_exp = exp->sched; break; } } else { @@ -623,17 +627,13 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now) default: BUG(); case CPUCLOCK_VIRT: - if (!cputime_eq(sig->it[CPUCLOCK_VIRT].expires, - cputime_zero) && - cputime_lt(sig->it[CPUCLOCK_VIRT].expires, + if (expires_le(sig->it[CPUCLOCK_VIRT].expires, exp->cpu)) break; sig->cputime_expires.virt_exp = exp->cpu; break; case CPUCLOCK_PROF: - if (!cputime_eq(sig->it[CPUCLOCK_PROF].expires, - cputime_zero) && - cputime_lt(sig->it[CPUCLOCK_PROF].expires, + if (expires_le(sig->it[CPUCLOCK_PROF].expires, exp->cpu)) break; i = sig->rlim[RLIMIT_CPU].rlim_cur; -- 1.5.5.6
| |