mirror of https://gitee.com/openkylin/linux.git
Merge branch 'timers/for-arm' into timers/core
This commit is contained in:
commit
86c8ead593
|
@ -92,6 +92,17 @@ static void err_broadcast(const struct cpumask *mask)
|
|||
pr_crit_once("Failed to broadcast timer tick. Some CPUs may be unresponsive.\n");
|
||||
}
|
||||
|
||||
static void tick_device_setup_broadcast_func(struct clock_event_device *dev)
|
||||
{
|
||||
if (!dev->broadcast)
|
||||
dev->broadcast = tick_broadcast;
|
||||
if (!dev->broadcast) {
|
||||
pr_warn_once("%s depends on broadcast, but no broadcast function available\n",
|
||||
dev->name);
|
||||
dev->broadcast = err_broadcast;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check, if the device is disfunctional and a place holder, which
|
||||
* needs to be handled by the broadcast device.
|
||||
|
@ -111,13 +122,7 @@ int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu)
|
|||
*/
|
||||
if (!tick_device_is_functional(dev)) {
|
||||
dev->event_handler = tick_handle_periodic;
|
||||
if (!dev->broadcast)
|
||||
dev->broadcast = tick_broadcast;
|
||||
if (!dev->broadcast) {
|
||||
pr_warn_once("%s depends on broadcast, but no broadcast function available\n",
|
||||
dev->name);
|
||||
dev->broadcast = err_broadcast;
|
||||
}
|
||||
tick_device_setup_broadcast_func(dev);
|
||||
cpumask_set_cpu(cpu, tick_get_broadcast_mask());
|
||||
tick_broadcast_start_periodic(tick_broadcast_device.evtdev);
|
||||
ret = 1;
|
||||
|
@ -129,9 +134,10 @@ int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu)
|
|||
*/
|
||||
if (!(dev->features & CLOCK_EVT_FEAT_C3STOP)) {
|
||||
int cpu = smp_processor_id();
|
||||
|
||||
cpumask_clear_cpu(cpu, tick_get_broadcast_mask());
|
||||
tick_broadcast_clear_oneshot(cpu);
|
||||
} else {
|
||||
tick_device_setup_broadcast_func(dev);
|
||||
}
|
||||
}
|
||||
raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
|
||||
|
|
Loading…
Reference in New Issue