Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86c8ead5 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge branch 'timers/for-arm' into timers/core

parents b22affe0 5d1d9a29
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -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);