• Grygorii Strashko's avatar
    ARM: OMAP4+: SMP: use lockless clkdm/pwrdm api in omap4_boot_secondary · 918af9f9
    Grygorii Strashko authored
    OMAP CPU hotplug uses cpu1's clocks and power domains for CPU1 wake up
    from low power states (or turn on CPU1). This part of code is also
    part of system suspend (disable_nonboot_cpus()).
    >From other side, cpu1's clocks and power domains are used by CPUIdle. All above
    functionality is mutually exclusive and, therefore, lockless clkdm/pwrdm api
    can be used in omap4_boot_secondary().
    
    This fixes below back-trace on -RT which is triggered by
    pwrdm_lock/unlock():
    
    BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917
     in_atomic(): 1, irqs_disabled(): 0, pid: 118, name: sh
     9 locks held by sh/118:
      #0:  (sb_writers#4){.+.+.+}, at: [<c0144a6c>] vfs_write+0x13c/0x164
      #1:  (&of->mutex){+.+.+.}, at: [<c01b4c70>] kernfs_fop_write+0x48/0x19c
      #2:  (s_active#24){.+.+.+}, at: [<c01b4c78>] kernfs_fop_write+0x50/0x19c
      #3:  (device_hotplug_lock){+.+.+.}, at: [<c03cbff0>] lock_device_hotplug_sysfs+0xc/0x4c
      #4:  (&dev->mutex){......}, at: [<c03cd284>] device_online+0x14/0x88
      #5:  (cpu_add_remove_lock){+.+.+.}, at: [<c003af90>] cpu_up+0x50/0x1a0
      #6:  (cpu_hotplug.lock){++++++}, at: [<c003ae48>] cpu_hotplug_begin+0x0/0xc4
      #7:  (cpu_hotplug.lock#2){+.+.+.}, at: [<c003aec0>] cpu_hotplug_begin+0x78/0xc4
      #8:  (boot_lock){+.+...}, at: [<c002b254>] omap4_boot_secondary+0x1c/0x178
     Preemption disabled at:[<  (null)>]   (null)
    
     CPU: 0 PID: 118 Comm: sh Not tainted 4.1.12-rt11-01998-gb4a62c3-dirty #137
     Hardware name: Generic DRA74X (Flattened Device Tree)
     [<c0017574>] (unwind_backtrace) from [<c0013be8>] (show_stack+0x10/0x14)
     [<c0013be8>] (show_stack) from [<c05a8670>] (dump_stack+0x80/0x94)
     [<c05a8670>] (dump_stack) from [<c05ad158>] (rt_spin_lock+0x24/0x54)
     [<c05ad158>] (rt_spin_lock) from [<c0030dac>] (clkdm_wakeup+0x10/0x2c)
     [<c0030dac>] (clkdm_wakeup) from [<c002b2c0>] (omap4_boot_secondary+0x88/0x178)
     [<c002b2c0>] (omap4_boot_secondary) from [<c0015d00>] (__cpu_up+0xc4/0x164)
     [<c0015d00>] (__cpu_up) from [<c003b09c>] (cpu_up+0x15c/0x1a0)
     [<c003b09c>] (cpu_up) from [<c03cd2d4>] (device_online+0x64/0x88)
     [<c03cd2d4>] (device_online) from [<c03cd360>] (online_store+0x68/0x74)
     [<c03cd360>] (online_store) from [<c01b4ce0>] (kernfs_fop_write+0xb8/0x19c)
     [<c01b4ce0>] (kernfs_fop_write) from [<c0144124>] (__vfs_write+0x20/0xd8)
     [<c0144124>] (__vfs_write) from [<c01449c0>] (vfs_write+0x90/0x164)
     [<c01449c0>] (vfs_write) from [<c01451e4>] (SyS_write+0x44/0x9c)
     [<c01451e4>] (SyS_write) from [<c0010240>] (ret_fast_syscall+0x0/0x54)
     CPU1: smp_ops.cpu_die() returned, trying to resuscitate
    
    Cc: Tero Kristo <t-kristo@ti.com>
    Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    918af9f9
omap-smp.c 6.91 KB