31 Jul, 2017
1 commit
-
This patch replaces an rwlock and raw notifier by an atomic notifier
protected by a spin_lock and RCU.The main reason for this change is due to a 'scheduling while atomic'
bug with RT kernels on ARM/ARM64. On ARM/ARM64, the rwlock
cpu_pm_notifier_lock in cpu_pm_enter/exit() causes a potential
schedule after IRQ disable in the idle call chain:cpu_startup_entry
cpu_idle_loop
local_irq_disable()
cpuidle_idle_call
call_cpuidle
cpuidle_enter
cpuidle_enter_state
->enter :arm_enter_idle_state
cpu_pm_enter/exit
CPU_PM_CPU_IDLE_ENTER
read_lock(&cpu_pm_notifier_lock); ] arm_enter_idle_state+0x18/0x70
[ 4.609614] Modules linked in:
[ 4.609615] [] cpuidle_enter_state+0xf0/0x218
[ 4.609620] [] cpuidle_enter+0x18/0x20
[ 4.609626] Preemption disabled at:
[ 4.609627] [] call_cpuidle+0x24/0x40
[ 4.609635] [] schedule_preempt_disabled+0x1c/0x28
[ 4.609639] [] cpu_startup_entry+0x154/0x1f8
[ 4.609645] [] secondary_start_kernel+0x15c/0x1a0Daniel Lezcano said this notification is needed on arm/arm64 platforms.
Sebastian suggested using atomic_notifier instead of rwlock, which is not
only removing the sleeping in idle, but also improving latency.Tony Lindgren found a miss use that rcu_read_lock used after rcu_idle_enter
Paul McKenney suggested trying RCU_NONIDLE.Signed-off-by: Alex Shi
Tested-by: Tony Lindgren
Acked-by: Sebastian Andrzej Siewior
[ rjw: Subject & changelog ]
Signed-off-by: Rafael J. Wysocki
03 Sep, 2015
1 commit
-
cpu_cluster_pm_exit() must be sent after cpu_cluster_pm_enter() has been
sent for the cluster and before any cpu_pm_exit() notifications are sent
for any CPU.Cc: Nicolas Pitre
Acked-by: Kevin Hilman
Signed-off-by: Lina Iyer
Signed-off-by: Rafael J. Wysocki
01 Jun, 2012
1 commit
-
Signed-off-by: Nicolas Pitre
Acked-by: Colin Cross
Acked-by: Santosh Shilimkar
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
23 Sep, 2011
2 commits
-
Implements syscore_ops in cpu_pm to call the cpu and
cpu cluster notifiers during suspend and resume,
allowing drivers receiving the notifications to
avoid implementing syscore_ops.Signed-off-by: Colin Cross
Signed-off-by: Santosh Shilimkar
Reviewed-by: Kevin Hilman
Tested-and-Acked-by: Shawn Guo
Tested-by: Vishwanath BS -
During some CPU power modes entered during idle, hotplug and
suspend, peripherals located in the CPU power domain, such as
the GIC, localtimers, and VFP, may be powered down. Add a
notifier chain that allows drivers for those peripherals to
be notified before and after they may be reset.Notified drivers can include VFP co-processor, interrupt controller
and it's PM extensions, local CPU timers context save/restore which
shouldn't be interrupted. Hence CPU PM event APIs must be called
with interrupts disabled.Signed-off-by: Colin Cross
Signed-off-by: Santosh Shilimkar
Reviewed-by: Kevin Hilman
Tested-and-Acked-by: Shawn Guo
Tested-by: Kevin Hilman
Tested-by: Vishwanath BS