diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-15 13:06:19 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-15 13:06:19 -0400 |
| commit | 19035e5b5d1e3127b4925d86f6a77964f91f2c3c (patch) | |
| tree | c9e7e9073970176a5b0970da715cb6430c3c9069 /kernel/time | |
| parent | f9db6e095115f9411b9647bdb9d81fe11f3d8b54 (diff) | |
| parent | eea08f32adb3f97553d49a4f79a119833036000a (diff) | |
Merge branch 'timers-for-linus-migration' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'timers-for-linus-migration' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
timers: Logic to move non pinned timers
timers: /proc/sys sysctl hook to enable timer migration
timers: Identifying the existing pinned timers
timers: Framework for identifying pinned timers
timers: allow deferrable timers for intervals tv2-tv5 to be deferred
Fix up conflicts in kernel/sched.c and kernel/timer.c manually
Diffstat (limited to 'kernel/time')
| -rw-r--r-- | kernel/time/clockevents.c | 12 | ||||
| -rw-r--r-- | kernel/time/tick-sched.c | 7 |
2 files changed, 16 insertions, 3 deletions
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 3948fa644a2..1ad6dd46111 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/notifier.h> | 18 | #include <linux/notifier.h> |
| 19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
| 20 | #include <linux/sysdev.h> | 20 | #include <linux/sysdev.h> |
| 21 | #include <linux/tick.h> | ||
| 21 | 22 | ||
| 22 | /* The registered clock event devices */ | 23 | /* The registered clock event devices */ |
| 23 | static LIST_HEAD(clockevent_devices); | 24 | static LIST_HEAD(clockevent_devices); |
| @@ -253,4 +254,15 @@ void clockevents_notify(unsigned long reason, void *arg) | |||
| 253 | spin_unlock(&clockevents_lock); | 254 | spin_unlock(&clockevents_lock); |
| 254 | } | 255 | } |
| 255 | EXPORT_SYMBOL_GPL(clockevents_notify); | 256 | EXPORT_SYMBOL_GPL(clockevents_notify); |
| 257 | |||
| 258 | ktime_t clockevents_get_next_event(int cpu) | ||
| 259 | { | ||
| 260 | struct tick_device *td; | ||
| 261 | struct clock_event_device *dev; | ||
| 262 | |||
| 263 | td = &per_cpu(tick_cpu_device, cpu); | ||
| 264 | dev = td->evtdev; | ||
| 265 | |||
| 266 | return dev->next_event; | ||
| 267 | } | ||
| 256 | #endif | 268 | #endif |
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index d3f1ef4d5cb..2aff39c6f10 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
| @@ -349,7 +349,7 @@ void tick_nohz_stop_sched_tick(int inidle) | |||
| 349 | 349 | ||
| 350 | if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { | 350 | if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { |
| 351 | hrtimer_start(&ts->sched_timer, expires, | 351 | hrtimer_start(&ts->sched_timer, expires, |
| 352 | HRTIMER_MODE_ABS); | 352 | HRTIMER_MODE_ABS_PINNED); |
| 353 | /* Check, if the timer was already in the past */ | 353 | /* Check, if the timer was already in the past */ |
| 354 | if (hrtimer_active(&ts->sched_timer)) | 354 | if (hrtimer_active(&ts->sched_timer)) |
| 355 | goto out; | 355 | goto out; |
| @@ -395,7 +395,7 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now) | |||
| 395 | 395 | ||
| 396 | if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { | 396 | if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { |
| 397 | hrtimer_start_expires(&ts->sched_timer, | 397 | hrtimer_start_expires(&ts->sched_timer, |
| 398 | HRTIMER_MODE_ABS); | 398 | HRTIMER_MODE_ABS_PINNED); |
| 399 | /* Check, if the timer was already in the past */ | 399 | /* Check, if the timer was already in the past */ |
| 400 | if (hrtimer_active(&ts->sched_timer)) | 400 | if (hrtimer_active(&ts->sched_timer)) |
| 401 | break; | 401 | break; |
| @@ -698,7 +698,8 @@ void tick_setup_sched_timer(void) | |||
| 698 | 698 | ||
| 699 | for (;;) { | 699 | for (;;) { |
| 700 | hrtimer_forward(&ts->sched_timer, now, tick_period); | 700 | hrtimer_forward(&ts->sched_timer, now, tick_period); |
| 701 | hrtimer_start_expires(&ts->sched_timer, HRTIMER_MODE_ABS); | 701 | hrtimer_start_expires(&ts->sched_timer, |
| 702 | HRTIMER_MODE_ABS_PINNED); | ||
| 702 | /* Check, if the timer was already in the past */ | 703 | /* Check, if the timer was already in the past */ |
| 703 | if (hrtimer_active(&ts->sched_timer)) | 704 | if (hrtimer_active(&ts->sched_timer)) |
| 704 | break; | 705 | break; |
