mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
918af9f941
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: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com> |
||
---|---|---|
.. | ||
include/mach | ||
am33xx-restart.c | ||
am33xx.h | ||
board-flash.c | ||
board-flash.h | ||
board-generic.c | ||
board-ldp.c | ||
board-n8x0.c | ||
board-rx51-peripherals.c | ||
board-rx51-video.c | ||
board-rx51.c | ||
board-rx51.h | ||
clkt2xxx_dpll.c | ||
clkt2xxx_dpllcore.c | ||
clkt2xxx_virt_prcm_set.c | ||
clock2xxx.h | ||
clock3xxx.h | ||
clock.c | ||
clock.h | ||
clockdomain.c | ||
clockdomain.h | ||
clockdomains2xxx_3xxx_data.c | ||
clockdomains3xxx_data.c | ||
clockdomains7xx_data.c | ||
clockdomains33xx_data.c | ||
clockdomains43xx_data.c | ||
clockdomains44xx_data.c | ||
clockdomains54xx_data.c | ||
clockdomains81xx_data.c | ||
clockdomains2420_data.c | ||
clockdomains2430_data.c | ||
cm1_7xx.h | ||
cm1_44xx.h | ||
cm1_54xx.h | ||
cm2_7xx.h | ||
cm2_44xx.h | ||
cm2_54xx.h | ||
cm2xxx_3xxx.h | ||
cm2xxx.c | ||
cm2xxx.h | ||
cm3xxx.c | ||
cm3xxx.h | ||
cm33xx.c | ||
cm33xx.h | ||
cm44xx.h | ||
cm81xx.h | ||
cm_common.c | ||
cm-regbits-7xx.h | ||
cm-regbits-24xx.h | ||
cm-regbits-33xx.h | ||
cm-regbits-34xx.h | ||
cm-regbits-44xx.h | ||
cm-regbits-54xx.h | ||
cm.h | ||
cminst44xx.c | ||
common-board-devices.c | ||
common-board-devices.h | ||
common.c | ||
common.h | ||
control.c | ||
control.h | ||
cpuidle34xx.c | ||
cpuidle44xx.c | ||
ctrl_module_wkup_44xx.h | ||
devices.c | ||
display.c | ||
display.h | ||
dma.c | ||
drm.c | ||
dss-common.c | ||
dss-common.h | ||
fb.c | ||
gpio.c | ||
gpmc-nand.c | ||
gpmc-onenand.c | ||
gpmc-smsc911x.c | ||
gpmc-smsc911x.h | ||
gpmc.h | ||
hdq1w.c | ||
hdq1w.h | ||
hsmmc.c | ||
hsmmc.h | ||
i2c.c | ||
i2c.h | ||
id.c | ||
id.h | ||
io.c | ||
iomap.h | ||
Kconfig | ||
l3_2xxx.h | ||
l3_3xxx.h | ||
l4_2xxx.h | ||
l4_3xxx.h | ||
Makefile | ||
Makefile.boot | ||
mcbsp.c | ||
mmc.h | ||
msdi.c | ||
mux34xx.c | ||
mux34xx.h | ||
mux.c | ||
mux.h | ||
omap2-restart.c | ||
omap3-restart.c | ||
omap4-common.c | ||
omap4-restart.c | ||
omap4-sar-layout.h | ||
omap24xx.h | ||
omap34xx.h | ||
omap44xx.h | ||
omap54xx.h | ||
omap_device.c | ||
omap_device.h | ||
omap_hwmod_2xxx_3xxx_interconnect_data.c | ||
omap_hwmod_2xxx_3xxx_ipblock_data.c | ||
omap_hwmod_2xxx_interconnect_data.c | ||
omap_hwmod_2xxx_ipblock_data.c | ||
omap_hwmod_3xxx_data.c | ||
omap_hwmod_7xx_data.c | ||
omap_hwmod_33xx_43xx_common_data.h | ||
omap_hwmod_33xx_43xx_interconnect_data.c | ||
omap_hwmod_33xx_43xx_ipblock_data.c | ||
omap_hwmod_33xx_data.c | ||
omap_hwmod_43xx_data.c | ||
omap_hwmod_44xx_data.c | ||
omap_hwmod_54xx_data.c | ||
omap_hwmod_81xx_data.c | ||
omap_hwmod_2420_data.c | ||
omap_hwmod_2430_data.c | ||
omap_hwmod_common_data.c | ||
omap_hwmod_common_data.h | ||
omap_hwmod_common_ipblock_data.c | ||
omap_hwmod_reset.c | ||
omap_hwmod.c | ||
omap_hwmod.h | ||
omap_opp_data.h | ||
omap_phy_internal.c | ||
omap_twl.c | ||
omap-headsmp.S | ||
omap-hotplug.c | ||
omap-iommu.c | ||
omap-mpuss-lowpower.c | ||
omap-pm-noop.c | ||
omap-pm.h | ||
omap-secure.c | ||
omap-secure.h | ||
omap-smc.S | ||
omap-smp.c | ||
omap-wakeupgen.c | ||
omap-wakeupgen.h | ||
opp2xxx.h | ||
opp3xxx_data.c | ||
opp4xxx_data.c | ||
opp2420_data.c | ||
opp2430_data.c | ||
opp.c | ||
pdata-quirks.c | ||
pm24xx.c | ||
pm34xx.c | ||
pm44xx.c | ||
pm-debug.c | ||
pm.c | ||
pm.h | ||
pmu.c | ||
powerdomain-common.c | ||
powerdomain.c | ||
powerdomain.h | ||
powerdomains2xxx_3xxx_data.c | ||
powerdomains2xxx_3xxx_data.h | ||
powerdomains2xxx_data.c | ||
powerdomains3xxx_data.c | ||
powerdomains7xx_data.c | ||
powerdomains33xx_data.c | ||
powerdomains43xx_data.c | ||
powerdomains44xx_data.c | ||
powerdomains54xx_data.c | ||
prcm43xx.h | ||
prcm44xx.h | ||
prcm_mpu7xx.h | ||
prcm_mpu44xx.c | ||
prcm_mpu44xx.h | ||
prcm_mpu54xx.h | ||
prcm_mpu_44xx_54xx.h | ||
prcm-common.h | ||
prm2xxx_3xxx.c | ||
prm2xxx_3xxx.h | ||
prm2xxx.c | ||
prm2xxx.h | ||
prm3xxx.c | ||
prm3xxx.h | ||
prm7xx.h | ||
prm33xx.c | ||
prm33xx.h | ||
prm44xx_54xx.h | ||
prm44xx.c | ||
prm44xx.h | ||
prm54xx.h | ||
prm_common.c | ||
prm-regbits-24xx.h | ||
prm-regbits-33xx.h | ||
prm-regbits-34xx.h | ||
prm-regbits-44xx.h | ||
prm.h | ||
prminst44xx.c | ||
prminst44xx.h | ||
scrm44xx.h | ||
scrm54xx.h | ||
sdram-hynix-h8mbx00u0mer-0em.h | ||
sdram-micron-mt46h32m32lf-6.h | ||
sdram-nokia.c | ||
sdram-nokia.h | ||
sdram-numonyx-m65kxxxxam.h | ||
sdram-qimonda-hyb18m512160af-6.h | ||
sdrc2xxx.c | ||
sdrc.c | ||
sdrc.h | ||
serial.c | ||
serial.h | ||
sleep24xx.S | ||
sleep34xx.S | ||
sleep44xx.S | ||
smartreflex-class3.c | ||
soc.h | ||
sr_device.c | ||
sram242x.S | ||
sram243x.S | ||
sram.c | ||
sram.h | ||
ti81xx-restart.c | ||
ti81xx.h | ||
timer.c | ||
twl-common.c | ||
twl-common.h | ||
usb-host.c | ||
usb-musb.c | ||
usb-tusb6010.c | ||
usb.h | ||
vc3xxx_data.c | ||
vc44xx_data.c | ||
vc.c | ||
vc.h | ||
voltage.c | ||
voltage.h | ||
voltagedomains2xxx_data.c | ||
voltagedomains3xxx_data.c | ||
voltagedomains44xx_data.c | ||
voltagedomains54xx_data.c | ||
vp3xxx_data.c | ||
vp44xx_data.c | ||
vp.c | ||
vp.h | ||
wd_timer.c | ||
wd_timer.h |