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/0x1a0

    Daniel 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

    Alex Shi
     

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

    Lina Iyer
     

01 Jun, 2012

1 commit


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

    Colin Cross
     
  • 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

    Colin Cross