Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- a/kernel/time/tick-broadcast.c
- +++ b/kernel/time/tick-broadcast.c
- @@ -523,10 +523,11 @@ static void tick_broadcast_init_next_event(struct cpumask *mask,
- */
- void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
- {
- + int cpu = smp_processor_id();
- +
- /* Set it up only once ! */
- if (bc->event_handler != tick_handle_oneshot_broadcast) {
- int was_periodic = bc->mode == CLOCK_EVT_MODE_PERIODIC;
- - int cpu = smp_processor_id();
- bc->event_handler = tick_handle_oneshot_broadcast;
- clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
- @@ -552,6 +553,15 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
- tick_broadcast_set_event(tick_next_period, 1);
- } else
- bc->next_event.tv64 = KTIME_MAX;
- + } else {
- + /*
- + * The first cpu which switches to oneshot mode sets
- + * the bit for all other cpus which are in the general
- + * (periodic) broadcast mask. So the bit is set and
- + * would prevent the first broadcast enter after this
- + * to program the bc device.
- + */
- + tick_broadcast_clear_oneshot(cpu);
- }
- }
Add Comment
Please, Sign In to add comment