diff options
Diffstat (limited to 'kernel/time/tick-common.c')
-rw-r--r-- | kernel/time/tick-common.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index 0986a2bfab49..43ba1bdec14c 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c | |||
@@ -298,6 +298,28 @@ static void tick_shutdown(unsigned int *cpup) | |||
298 | spin_unlock_irqrestore(&tick_device_lock, flags); | 298 | spin_unlock_irqrestore(&tick_device_lock, flags); |
299 | } | 299 | } |
300 | 300 | ||
301 | static void tick_suspend_periodic(void) | ||
302 | { | ||
303 | struct tick_device *td = &__get_cpu_var(tick_cpu_device); | ||
304 | unsigned long flags; | ||
305 | |||
306 | spin_lock_irqsave(&tick_device_lock, flags); | ||
307 | if (td->mode == TICKDEV_MODE_PERIODIC) | ||
308 | clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_SHUTDOWN); | ||
309 | spin_unlock_irqrestore(&tick_device_lock, flags); | ||
310 | } | ||
311 | |||
312 | static void tick_resume_periodic(void) | ||
313 | { | ||
314 | struct tick_device *td = &__get_cpu_var(tick_cpu_device); | ||
315 | unsigned long flags; | ||
316 | |||
317 | spin_lock_irqsave(&tick_device_lock, flags); | ||
318 | if (td->mode == TICKDEV_MODE_PERIODIC) | ||
319 | tick_setup_periodic(td->evtdev, 0); | ||
320 | spin_unlock_irqrestore(&tick_device_lock, flags); | ||
321 | } | ||
322 | |||
301 | /* | 323 | /* |
302 | * Notification about clock event devices | 324 | * Notification about clock event devices |
303 | */ | 325 | */ |
@@ -325,6 +347,16 @@ static int tick_notify(struct notifier_block *nb, unsigned long reason, | |||
325 | tick_shutdown(dev); | 347 | tick_shutdown(dev); |
326 | break; | 348 | break; |
327 | 349 | ||
350 | case CLOCK_EVT_NOTIFY_SUSPEND: | ||
351 | tick_suspend_periodic(); | ||
352 | tick_suspend_broadcast(); | ||
353 | break; | ||
354 | |||
355 | case CLOCK_EVT_NOTIFY_RESUME: | ||
356 | if (!tick_resume_broadcast()) | ||
357 | tick_resume_periodic(); | ||
358 | break; | ||
359 | |||
328 | default: | 360 | default: |
329 | break; | 361 | break; |
330 | } | 362 | } |