diff options
Diffstat (limited to 'kernel/time/tick-broadcast-hrtimer.c')
-rw-r--r-- | kernel/time/tick-broadcast-hrtimer.c | 13 |
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 | ||
105 | void tick_setup_hrtimer_broadcast(void) | 110 | void 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 | } |