clockevents: Enforce oneshot broadcast when broadcast mask is set on resume

The jinxed VAIO refuses to resume without hitting keys on the keyboard
when this is not enforced. It is unclear why the cpu ends up in a lower
C State without notifying the clock events layer, but enforcing the
oneshot broadcast here is safe.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by Thomas Gleixner and committed by Thomas Gleixner 07eec6af 729c6ba3

+12 -1
+12 -1
kernel/time/tick-broadcast.c
··· 382 382 383 383 int tick_resume_broadcast_oneshot(struct clock_event_device *bc) 384 384 { 385 + int cpu = smp_processor_id(); 386 + 387 + /* 388 + * If the CPU is marked for broadcast, enforce oneshot 389 + * broadcast mode. The jinxed VAIO does not resume otherwise. 390 + * No idea why it ends up in a lower C State during resume 391 + * without notifying the clock events layer. 392 + */ 393 + if (cpu_isset(cpu, tick_broadcast_mask)) 394 + cpu_set(cpu, tick_broadcast_oneshot_mask); 395 + 385 396 clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); 386 397 387 398 if(!cpus_empty(tick_broadcast_oneshot_mask)) 388 399 tick_broadcast_set_event(ktime_get(), 1); 389 400 390 - return cpu_isset(smp_processor_id(), tick_broadcast_oneshot_mask); 401 + return cpu_isset(cpu, tick_broadcast_oneshot_mask); 391 402 } 392 403 393 404 /*