lkml.org 
[lkml]   [2017]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 11/26] posix-timers: Store k_clock pointer in k_itimer
    Having the k_clock pointer in the k_itimer struct avoids the lookup in
    several code pathes and makes the next steps of unification of the hrtimer
    and alarmtimer based posix timers simpler.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    include/linux/posix-timers.h | 2 ++
    kernel/time/posix-cpu-timers.c | 2 ++
    kernel/time/posix-timers.c | 7 ++++---
    3 files changed, 8 insertions(+), 3 deletions(-)

    --- a/include/linux/posix-timers.h
    +++ b/include/linux/posix-timers.h
    @@ -55,6 +55,7 @@ struct cpu_timer_list {
    * @list: List head for binding the timer to signals->posix_timers
    * @t_hash: Entry in the posix timer hash table
    * @it_lock: Lock protecting the timer
    + * @kclock: Pointer to the k_clock struct handling this timer
    * @it_clock: The posix timer clock id
    * @it_id: The posix timer id for identifying the timer
    * @it_overrun: The overrun counter for pending signals
    @@ -74,6 +75,7 @@ struct k_itimer {
    struct list_head list;
    struct hlist_node t_hash;
    spinlock_t it_lock;
    + const struct k_clock *kclock;
    clockid_t it_clock;
    timer_t it_id;
    int it_overrun;
    --- a/kernel/time/posix-cpu-timers.c
    +++ b/kernel/time/posix-cpu-timers.c
    @@ -324,6 +324,8 @@ static int posix_cpu_timer_create(struct
    if (CPUCLOCK_WHICH(new_timer->it_clock) >= CPUCLOCK_MAX)
    return -EINVAL;

    + new_timer->kclock = &clock_posix_cpu;
    +
    INIT_LIST_HEAD(&new_timer->it.cpu.entry);

    rcu_read_lock();
    --- a/kernel/time/posix-timers.c
    +++ b/kernel/time/posix-timers.c
    @@ -519,6 +519,7 @@ SYSCALL_DEFINE3(timer_create, const cloc
    it_id_set = IT_ID_SET;
    new_timer->it_id = (timer_t) new_timer_id;
    new_timer->it_clock = which_clock;
    + new_timer->kclock = kc;
    new_timer->it_overrun = -1;

    if (timer_event_spec) {
    @@ -679,7 +680,7 @@ SYSCALL_DEFINE2(timer_gettime, timer_t,
    if (!timr)
    return -EINVAL;

    - kc = clockid_to_kclock(timr->it_clock);
    + kc = timr->kclock;
    if (WARN_ON_ONCE(!kc || !kc->timer_get))
    ret = -EINVAL;
    else
    @@ -798,7 +799,7 @@ SYSCALL_DEFINE4(timer_settime, timer_t,
    if (!timr)
    return -EINVAL;

    - kc = clockid_to_kclock(timr->it_clock);
    + kc = timr->kclock;
    if (WARN_ON_ONCE(!kc || !kc->timer_set))
    error = -EINVAL;
    else
    @@ -829,7 +830,7 @@ static int common_timer_del(struct k_iti

    static inline int timer_delete_hook(struct k_itimer *timer)
    {
    - const struct k_clock *kc = clockid_to_kclock(timer->it_clock);
    + const struct k_clock *kc = timer->kclock;

    if (WARN_ON_ONCE(!kc || !kc->timer_del))
    return -EINVAL;

    \
     
     \ /
      Last update: 2017-05-30 23:46    [W:4.121 / U:0.364 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site