mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
FROMGIT: tick/broadcast: Split __tick_broadcast_oneshot_control() into a helper
In preparation for adding support for per-cpu wakeup timers, split
_tick_broadcast_oneshot_control() into a helper function which deals
only with the broadcast timer management across idle transitions.
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20210524221818.15850-3-will@kernel.org
(cherry picked from commit e5007c288e tip/tip.git timers/core)
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 185092876
Change-Id: I14c5456ec1af0b8f73c85e9571f171ea1c3c564b
This commit is contained in:
parent
fbcfac4490
commit
4b3ac410bc
|
|
@ -717,24 +717,16 @@ static void broadcast_shutdown_local(struct clock_event_device *bc,
|
||||||
clockevents_switch_state(dev, CLOCK_EVT_STATE_SHUTDOWN);
|
clockevents_switch_state(dev, CLOCK_EVT_STATE_SHUTDOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __tick_broadcast_oneshot_control(enum tick_broadcast_state state)
|
static int ___tick_broadcast_oneshot_control(enum tick_broadcast_state state,
|
||||||
|
struct tick_device *td,
|
||||||
|
int cpu)
|
||||||
{
|
{
|
||||||
struct clock_event_device *bc, *dev;
|
struct clock_event_device *bc, *dev = td->evtdev;
|
||||||
int cpu, ret = 0;
|
int ret = 0;
|
||||||
ktime_t now;
|
ktime_t now;
|
||||||
|
|
||||||
/*
|
|
||||||
* If there is no broadcast device, tell the caller not to go
|
|
||||||
* into deep idle.
|
|
||||||
*/
|
|
||||||
if (!tick_broadcast_device.evtdev)
|
|
||||||
return -EBUSY;
|
|
||||||
|
|
||||||
dev = this_cpu_ptr(&tick_cpu_device)->evtdev;
|
|
||||||
|
|
||||||
raw_spin_lock(&tick_broadcast_lock);
|
raw_spin_lock(&tick_broadcast_lock);
|
||||||
bc = tick_broadcast_device.evtdev;
|
bc = tick_broadcast_device.evtdev;
|
||||||
cpu = smp_processor_id();
|
|
||||||
|
|
||||||
if (state == TICK_BROADCAST_ENTER) {
|
if (state == TICK_BROADCAST_ENTER) {
|
||||||
/*
|
/*
|
||||||
|
|
@ -863,6 +855,21 @@ int __tick_broadcast_oneshot_control(enum tick_broadcast_state state)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __tick_broadcast_oneshot_control(enum tick_broadcast_state state)
|
||||||
|
{
|
||||||
|
struct tick_device *td = this_cpu_ptr(&tick_cpu_device);
|
||||||
|
int cpu = smp_processor_id();
|
||||||
|
|
||||||
|
if (tick_broadcast_device.evtdev)
|
||||||
|
return ___tick_broadcast_oneshot_control(state, td, cpu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there is no broadcast device, tell the caller not
|
||||||
|
* to go into deep idle.
|
||||||
|
*/
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reset the one shot broadcast for a cpu
|
* Reset the one shot broadcast for a cpu
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user