Messages in this thread Patch in this message | | | From | Stanislav Fomichev <> | Subject | [PATCH] hrtimers: conditionally lock/unlock spinlock in hrtimer_get_next_event | Date | Mon, 9 Jun 2014 13:23:45 +0400 |
| |
In hrtimer_get_next_event we unconditionally lock/unlock spinlock, even if it's not required (hrtimer_hres_active() != 0). This patch moves locking/unlocking and mindelta range check inside the if clause, so we don't execute unnecessary operations.
Signed-off-by: Stanislav Fomichev <stfomichev@yandex-team.ru> --- kernel/hrtimer.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 39f339dcbe93..ce21e5f6bcf0 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1166,9 +1166,9 @@ ktime_t hrtimer_get_next_event(void) unsigned long flags; int i; - raw_spin_lock_irqsave(&cpu_base->lock, flags); - if (!hrtimer_hres_active()) { + raw_spin_lock_irqsave(&cpu_base->lock, flags); + for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) { struct hrtimer *timer; struct timerqueue_node *next; @@ -1183,12 +1183,13 @@ ktime_t hrtimer_get_next_event(void) if (delta.tv64 < mindelta.tv64) mindelta.tv64 = delta.tv64; } - } - raw_spin_unlock_irqrestore(&cpu_base->lock, flags); + raw_spin_unlock_irqrestore(&cpu_base->lock, flags); + + if (mindelta.tv64 < 0) + mindelta.tv64 = 0; + } - if (mindelta.tv64 < 0) - mindelta.tv64 = 0; return mindelta; } #endif -- 1.8.3.2
| |