Krzysztof Kozlowski <k...@kernel.org> writes: > Hi, > <snip> > > Overview of the problem > ======================= > On Exynos4210, by default Linux kernel uses cpuidle driver which tries > to enter low power mode, called AFTR (Arm Off, Top Running). On real > hardware this brings some power savings. This AFTR mode requires second > CPU to be off, so the driver (coupled cpuidle driver) when system is idle: > 1. Turns off second CPU, > 2. Enters AFTR on CPU0. > > However the QEMU system is then totally unresponsive (e.g. on serial console) > and RCU stalls appear from time to time. I spent some time on it and did not > find the real cause behind the lag. Maybe it is because the second CPU > does not really power down itself and system just burns the cycles under spin > locks?
Was this tested post the MTTCG merge? Maybe there is an interaction between power saving/halting the vCPU? I mention this because I already made some minor tweaks for handing the WFI instruction in MTTCG. See commit c22edfebff. You can test this by forcing the original behaviour by adding: -accel tcg,thread=single to your command line. > > Looking at recent stable kernels: > - 3.10, 3.16 - works fine with two CPUs (no CPUIDLE driver), > - 4.1 and newer - stalls and are unresponsive due to CPUIDLE being enabled. > > The cpuidle driver is not relying on DTS. It is just enabled in > exynos_defconfig > and works. > > Workarounds > =========== > 1. Boot with only 1 cpu > 2. Build a kernel with disabled CONFIG_CPU_IDLE > > > > Best regards, > Krzysztof > > Krzysztof Kozlowski (5): > hw/intc/exynos4210_gic: Fix GIC memory mappings for secondary CPU > hw/intc/exynos4210_gic: Use more meaningful name for local variable > hw/timer/exynos4210_mct: Fix checkpatch style errors > hw/timer/exynos4210_mct: Cleanup indentation and empty new lines > hw/timer/exynos4210_mct: Remove unused defines > > hw/intc/exynos4210_gic.c | 33 +++++++++++++++++++------------ > hw/timer/exynos4210_mct.c | 50 > ++++++++++++++++++++--------------------------- > 2 files changed, 41 insertions(+), 42 deletions(-) -- Alex Bennée