aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time/tick-broadcast-hrtimer.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/time/tick-broadcast-hrtimer.c')
-rw-r--r--kernel/time/tick-broadcast-hrtimer.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/kernel/time/tick-broadcast-hrtimer.c b/kernel/time/tick-broadcast-hrtimer.c
index 5be6154e2fd2..c1f5bb590b5e 100644
--- a/kernel/time/tick-broadcast-hrtimer.c
+++ b/kernel/time/tick-broadcast-hrtimer.c
@@ -59,11 +59,16 @@ static int bc_set_next(ktime_t expires, struct clock_event_device *bc)
59 * hrtimer_{start/cancel} functions call into tracing, 59 * hrtimer_{start/cancel} functions call into tracing,
60 * calls to these functions must be bound within RCU_NONIDLE. 60 * calls to these functions must be bound within RCU_NONIDLE.
61 */ 61 */
62 RCU_NONIDLE({ 62 RCU_NONIDLE(
63 {
63 bc_moved = hrtimer_try_to_cancel(&bctimer) >= 0; 64 bc_moved = hrtimer_try_to_cancel(&bctimer) >= 0;
64 if (bc_moved) 65 if (bc_moved) {
65 hrtimer_start(&bctimer, expires, 66 hrtimer_start(&bctimer, expires,
66 HRTIMER_MODE_ABS_PINNED);}); 67 HRTIMER_MODE_ABS_PINNED_HARD);
68 }
69 }
70 );
71
67 if (bc_moved) { 72 if (bc_moved) {
68 /* Bind the "device" to the cpu */ 73 /* Bind the "device" to the cpu */
69 bc->bound_on = smp_processor_id(); 74 bc->bound_on = smp_processor_id();
@@ -104,7 +109,7 @@ static enum hrtimer_restart bc_handler(struct hrtimer *t)
104 109
105void tick_setup_hrtimer_broadcast(void) 110void tick_setup_hrtimer_broadcast(void)
106{ 111{
107 hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); 112 hrtimer_init(&bctimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD);
108 bctimer.function = bc_handler; 113 bctimer.function = bc_handler;
109 clockevents_register_device(&ce_broadcast_hrtimer); 114 clockevents_register_device(&ce_broadcast_hrtimer);
110} 115}