Re: [PATCH] clockevents: Leave broadcast device shtudown only ifthe current device is always running.

From: Suresh Siddha
Date: Wed Apr 11 2012 - 16:59:04 EST


On Thu, 2012-04-12 at 00:04 +0800, Feng Tang wrote:
> Thanks for the explaination, I understand the root cause now.
>
> And regarding the original commit 77b0d60c5
> clockevents: Leave the broadcast device in shutdown mode when not needed
>
> @@ -575,11 +575,15 @@ void tick_broadcast_switch_to_oneshot(void)
> unsigned long flags;
>
> raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
> + if (cpumask_empty(tick_get_broadcast_mask()))
> + goto end;
>
> tick_broadcast_device.mode = TICKDEV_MODE_ONESHOT;
> bc = tick_broadcast_device.evtdev;
> if (bc)
> tick_broadcast_setup_oneshot(bc);
> +
> +end:
> raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
> }
>
> The tick_broadcast_switch_to_oneshot() get called mostly at boot time or
> during cpu hotplug. And when it is called at boot time, the tick_broadcast_mask
> is alwasys 0 at the point,

On the correctly working platforms, that is the case. But there are
cases where APIC timer calibration fails, in which case APIC is marked
as CLOCK_EVT_FEAT_DUMMY and in this scenario, broadcast mask will be
non-zero.

> thus this check is always true and skip the
> following oneshot setting up for broadcast device,

On most platforms yes, but there are some buggy exceptions which the
code is trying to handle.

thanks,
suresh

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/