Subject: exynos4: cpu hotplug + cpuidle/AFTR broken

From: [email-masked] (Krzysztof Kozlowski)
Date: Tue, 01 Apr 2014 13:04:18 +0200

On Tue, 2014-04-01 at 12:43 +0200, Daniel Lezcano wrote:
> Hi all,
> 
> I tried the v3.14 kernel and unplugged the cpu1. That leads to a kernel 
> hang without any trace.
> 
> If I disable the cpuidle AFTR state through sysfs before unplugging 
> cpu1, it works well.

Hi,

Can you describe the hardware (at least SoC)?

I encountered stalls after CPU hotplugging. In my case affected were
SOC-s s where MCT local timer interrupt is shared (SPI). It could be
reproduced easily by continuous hotplugging CPU1.

Fix for one issue (CPU1 stall) in my case:
http://thread.gmane.org/gmane.linux.kernel.stable/85047
However I still encounter CPU0 stall in the same test case (hotplug
CPU1).

Maybe these issues are similar?

Best regards,
Krzysztof

> 
> I reproduced the issue on v3.14, v3.13, v3.12, v3.11
> 
> v3.10 works fine.
> 
> I tried to git bisect but I finally gave up due to too much kernel 
> hanging at boot.
> 
> The git bisect log below.
> 
> Thanks
>    -- Daniel
> 
> 
> git bisect start
> # bad: [6e4664525b1db28f8c4e1130957f70a94c19213e] Linux 3.11
> git bisect bad 6e4664525b1db28f8c4e1130957f70a94c19213e
> # good: [8bb495e3f02401ee6f76d1b1d77f3ac9f079e376] Linux 3.10
> git bisect good 8bb495e3f02401ee6f76d1b1d77f3ac9f079e376
> # good: [8b70a90cabafb6a6e1a0d3f838b38355fe48337e] Merge branch 
> 'for-v3.11' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping
> git bisect good 8b70a90cabafb6a6e1a0d3f838b38355fe48337e
> # bad: [b41e6a51d57e231d2ed237f17f002cc536c0987c] sh_eth: SH_ETH should 
> depend on HAS_DMA
> git bisect bad b41e6a51d57e231d2ed237f17f002cc536c0987c
> # bad: [2e17c5a97e231f3cb426f4b7895eab5be5c5442e] Merge branch 
> 'drm-next' of git://people.freedesktop.org/~airlied/linux
> git bisect bad 2e17c5a97e231f3cb426f4b7895eab5be5c5442e
> # good: [e631227f698f39969eb476d297f3ac65b43b51a5] drm/radeon: fix 
> endian bug in radeon_atom_get_mclk_range_table()
> git bisect good e631227f698f39969eb476d297f3ac65b43b51a5
> # bad: [9a5889ae1ce41f376e6a5b56e17e0c5a755fda80] Merge branch 
> 'for-linus' of 
> git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
> git bisect bad 9a5889ae1ce41f376e6a5b56e17e0c5a755fda80
> # bad: [be0c5d8c0bb0023e11f5c6d38e90f7b0f24edb64] Merge tag 
> 'nfs-for-3.11-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
> git bisect bad be0c5d8c0bb0023e11f5c6d38e90f7b0f24edb64
> # bad: [d2b4a646717153a1a180b64d4a8464054dbd700e] Merge branch 
> 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma
> git bisect bad d2b4a646717153a1a180b64d4a8464054dbd700e
> # skip: [07bd1172902e782f288e4d44b1fde7dec0f08b6f] tick: Sanitize 
> broadcast control logic
> git bisect skip 07bd1172902e782f288e4d44b1fde7dec0f08b6f
> # good: [757f4e51b74f7fb19251020e742a78111fdea194] MIPS: jz4740: Correct 
> clock gate bit for DMA controller
> git bisect good 757f4e51b74f7fb19251020e742a78111fdea194
> # skip: [064706514ec3fea740c2656e03c4f01f6a551ac4] clocksource: Add 
> generic dummy timer driver
> git bisect skip 064706514ec3fea740c2656e03c4f01f6a551ac4
> # skip: [55a68c23e0a675b2b8ac2656fd6edbf98b78e4c6] dw_apb_timer_of.c: 
> Remove parts that were picoxcell-specific
> git bisect skip 55a68c23e0a675b2b8ac2656fd6edbf98b78e4c6
> # skip: [fc1f7d5606487ae28d6c84e95401952927d7379e] clocksource: 
> apb_timer: Remove unsused function
> git bisect skip fc1f7d5606487ae28d6c84e95401952927d7379e
> # skip: [6cffe00f7d4e24679eae6b7aae4caaf915288256] alarmtimer: Add 
> functions for timerfd support
> git bisect skip 6cffe00f7d4e24679eae6b7aae4caaf915288256
> # good: [e24f6628811e2d4531b443684b598f7050932012] modpost: remove all 
> traces of cpuinit/cpuexit sections
> git bisect good e24f6628811e2d4531b443684b598f7050932012
> # skip: [629a6a2b7762a474177d08043bea094dd27e0a54] sched_clock: Add 
> temporary asm/sched_clock.h
> git bisect skip 629a6a2b7762a474177d08043bea094dd27e0a54
> # skip: [5c83545f24ab3dd67e0ae0e2b795fea750f08c34] power: Add option to 
> log time spent in suspend
> git bisect skip 5c83545f24ab3dd67e0ae0e2b795fea750f08c34
> # good: [2473f3e7a97ce8bc0fe7596cdb361b21221418eb] posix_cpu_timers: 
> consolidate expired timers check
> git bisect good 2473f3e7a97ce8bc0fe7596cdb361b21221418eb
> # skip: [336ae1180df5f69b9e0fb6561bec01c5f64361cf] ARM: sched_clock: 
> Load cycle count after epoch stabilizes
> git bisect skip 336ae1180df5f69b9e0fb6561bec01c5f64361cf
> # skip: [f5a2e34375a5e2b711aea488ac3ae50eeba6d57c] clocksource: Allow 
> clocksource select to skip current clocksource
> git bisect skip f5a2e34375a5e2b711aea488ac3ae50eeba6d57c
> # skip: [ce0b098981544d9f4e910ea48f3af3e726ca6d6b] x86: Fix 
> vrtc_get_time/set_mmss to use new timespec interface
> git bisect skip ce0b098981544d9f4e910ea48f3af3e726ca6d6b
> # skip: [d0951a23383d09276f7976ed34d8f1cede629b48] DMA: shdma: 
> shdma_chan_filter() has to be in shdma-base.h
> git bisect skip d0951a23383d09276f7976ed34d8f1cede629b48
> # skip: [7c4c3a0f18ba57ea2a2985034532303d2929902a] hrtimers: Support 
> resuming with two or more CPUs online (but stopped)
> git bisect skip 7c4c3a0f18ba57ea2a2985034532303d2929902a
> # skip: [a89c7edbe7d7aa80f507915f3dd801211b116b79] clocksource: Let 
> clocksource_unregister() return success/error
> git bisect skip a89c7edbe7d7aa80f507915f3dd801211b116b79
> # skip: [2699339361a9bacb3fa663e6b8981a040cfca4ee] clocksource: 
> vf_pit_timer: Use linux/sched_clock.h
> git bisect skip 2699339361a9bacb3fa663e6b8981a040cfca4ee
> # skip: [7172a286ced0c1f4f239a0fa09db54ed37d3ead2] clockevents: Get rid 
> of the notifier chain
> git bisect skip 7172a286ced0c1f4f239a0fa09db54ed37d3ead2
> # skip: [762cf9695d714d312ef7369bed1b9f9467c9e64e] Merge branch 
> 'timers/clockevents' of git://git.linaro.org/people/dlezcano/clockevents 
> into timers/core
> git bisect skip 762cf9695d714d312ef7369bed1b9f9467c9e64e
> # bad: [21884a83b2192a00885d7244a1dda32debd2fbc7] Merge branch 
> 'timers-core-for-linus' of 
> git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> git bisect bad 21884a83b2192a00885d7244a1dda32debd2fbc7
> # skip: [5a9b5855c248d0298eac4d5490c7bc11c2f1983b] ARM: sched_clock: 
> Remove unused needs_suspend member
> git bisect skip 5a9b5855c248d0298eac4d5490c7bc11c2f1983b
> # skip: [45cb8e01b2ecef1c2afb18333e95793fa1a90281] clockevents: Split 
> out selection logic
> git bisect skip 45cb8e01b2ecef1c2afb18333e95793fa1a90281
> # skip: [ffbfb5e316f0db486798ccf1db36a577ffe79637] ARM: sched_clock: 
> Return suspended count earlier
> git bisect skip ffbfb5e316f0db486798ccf1db36a577ffe79637
> # skip: [04397fe94ad65289884b9862b6a0c722ececaadf] timekeeping: Pass 
> flags instead of multiple bools to timekeeping_update()
> git bisect skip 04397fe94ad65289884b9862b6a0c722ececaadf
> # skip: [11682a41618f8094cb7a9330b4b6a12ffaef5774] alarmtimer: Export 
> symbols of functions declared in linux/alarmtimer.h
> git bisect skip 11682a41618f8094cb7a9330b4b6a12ffaef5774
> # skip: [fc1f7d5606487ae28d6c84e95401952927d7379e] clocksource: 
> apb_timer: Remove unsused function
> git bisect skip fc1f7d5606487ae28d6c84e95401952927d7379e
> 
>