[tip:timers/core] posix-timers: Use timer_rearm() callback in posixtimer_rearm()

From: tip-bot for Thomas Gleixner
Date: Mon Jun 05 2017 - 04:23:05 EST


Commit-ID: f37fb0aa4f453c7c785bbcecc4991ac48c5c0e51
Gitweb: http://git.kernel.org/tip/f37fb0aa4f453c7c785bbcecc4991ac48c5c0e51
Author: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
AuthorDate: Tue, 30 May 2017 23:15:47 +0200
Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
CommitDate: Sun, 4 Jun 2017 15:40:26 +0200

posix-timers: Use timer_rearm() callback in posixtimer_rearm()

Use the new timer_rearm() callback to replace the conditional hardcoded
calls into the hrtimer and cpu timer code.

This allows later to bring the same logic to alarmtimers.

Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: John Stultz <john.stultz@xxxxxxxxxx>
Link: http://lkml.kernel.org/r/20170530211656.889661919@xxxxxxxxxxxxx

---
kernel/time/posix-cpu-timers.c | 7 +++++--
kernel/time/posix-timers.c | 12 ++++++------
kernel/time/posix-timers.h | 2 --
3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index 1ba576d..96c833a 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -15,6 +15,8 @@

#include "posix-timers.h"

+static void posix_cpu_timer_rearm(struct k_itimer *timer);
+
/*
* Called after updating RLIMIT_CPU to run cpu timer and update
* tsk->signal->cputime_expires expiration cache if necessary. Needs
@@ -528,7 +530,7 @@ static void cpu_timer_fire(struct k_itimer *timer)
* reload the timer. But we need to keep it
* ticking in case the signal is deliverable next time.
*/
- posix_cpu_timer_schedule(timer);
+ posix_cpu_timer_rearm(timer);
++timer->it_requeue_pending;
}
}
@@ -984,7 +986,7 @@ static void check_process_timers(struct task_struct *tsk,
* This is called from the signal code (via posixtimer_rearm)
* when the last timer signal was delivered and we have to reload the timer.
*/
-void posix_cpu_timer_schedule(struct k_itimer *timer)
+static void posix_cpu_timer_rearm(struct k_itimer *timer)
{
struct sighand_struct *sighand;
unsigned long flags;
@@ -1431,6 +1433,7 @@ const struct k_clock clock_posix_cpu = {
.timer_set = posix_cpu_timer_set,
.timer_del = posix_cpu_timer_del,
.timer_get = posix_cpu_timer_get,
+ .timer_rearm = posix_cpu_timer_rearm,
};

const struct k_clock clock_process = {
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index 036b7e7..b12582a 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -278,10 +278,9 @@ static __init int init_posix_timers(void)
NULL);
return 0;
}
-
__initcall(init_posix_timers);

-static void schedule_next_timer(struct k_itimer *timr)
+static void common_hrtimer_rearm(struct k_itimer *timr)
{
struct hrtimer *timer = &timr->it.real.timer;

@@ -315,10 +314,7 @@ void posixtimer_rearm(struct siginfo *info)
return;

if (timr->it_requeue_pending == info->si_sys_private) {
- if (timr->it_clock < 0)
- posix_cpu_timer_schedule(timr);
- else
- schedule_next_timer(timr);
+ timr->kclock->timer_rearm(timr);

timr->it_overrun_last = timr->it_overrun;
timr->it_overrun = -1;
@@ -1046,6 +1042,7 @@ static const struct k_clock clock_realtime = {
.timer_set = common_timer_set,
.timer_get = common_timer_get,
.timer_del = common_timer_del,
+ .timer_rearm = common_hrtimer_rearm,
};

static const struct k_clock clock_monotonic = {
@@ -1057,6 +1054,7 @@ static const struct k_clock clock_monotonic = {
.timer_set = common_timer_set,
.timer_get = common_timer_get,
.timer_del = common_timer_del,
+ .timer_rearm = common_hrtimer_rearm,
};

static const struct k_clock clock_monotonic_raw = {
@@ -1083,6 +1081,7 @@ static const struct k_clock clock_tai = {
.timer_set = common_timer_set,
.timer_get = common_timer_get,
.timer_del = common_timer_del,
+ .timer_rearm = common_hrtimer_rearm,
};

static const struct k_clock clock_boottime = {
@@ -1094,6 +1093,7 @@ static const struct k_clock clock_boottime = {
.timer_set = common_timer_set,
.timer_get = common_timer_get,
.timer_del = common_timer_del,
+ .timer_rearm = common_hrtimer_rearm,
};

static const struct k_clock * const posix_clocks[] = {
diff --git a/kernel/time/posix-timers.h b/kernel/time/posix-timers.h
index 02ffd1b..1f6f6f9 100644
--- a/kernel/time/posix-timers.h
+++ b/kernel/time/posix-timers.h
@@ -28,5 +28,3 @@ extern const struct k_clock clock_thread;
extern const struct k_clock alarm_clock;

int posix_timer_event(struct k_itimer *timr, int si_private);
-
-void posix_cpu_timer_schedule(struct k_itimer *timer);