ARM kexec SMP problem using exynos4210
Subsystems (2)
Hi,
I have tested kexec to Nuri board using Exynos4210(Dual-core ARM Cortex-A9) on the latest mainline kernel but i am facing one problem.
The kernel enabled SMP, kernel_kexec() calls machine_shutdown to stop all cpus except current cpu and jumps to the new kernel but the kernel is hanged soon.
I used cpu_down(1) to make disabled cpu1 instead of smp_send_stop of machine_shutdown and it is booted successfully to new kernel.
Any ideas?
Thanks.
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 1 line · Joonyoung Shim
Hi,
Hello [adding linux-arm-kernel],
Quoted 11 lines
I have tested kexec to Nuri board using Exynos4210(Dual-core ARM Cortex-A9) on the latest mainline kernel but i am facing one problem.
The kernel enabled SMP,
kernel_kexec()callsmachine_shutdownto stop all cpus except current cpu and jumps to the new kernel but the kernel is hanged soon.I used
cpu_down(1)to make disabled cpu1 instead ofsmp_send_stopofmachine_shutdownand it is booted successfully to new kernel.Any ideas?
I suspect that the secondary CPUs are not being parked correctly in the first kernel. For this, you need to implement platform_cpu_kill for your platform.
Given that exynos just does:
int platform_cpu_kill(unsigned int cpu)
{
return 1;
}then I'm not surprised it doesn't work. Try adding something in there which puts the CPU into a state where it can be booted by the next kernel.
I considered adding a purely software mechanism for doing this (in fact, I prototyped something up on vexpress) but after discussions with some board maintainers it became clear that most SMP SoCs have hardware assists for hotplug, and the software approach is really only need for things like the ARM development boards.
Will
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 20 lines · Will Deacon
Quoted 1 line · Joonyoung Shim
Hi,
Hello [adding linux-arm-kernel],
Quoted 11 lines
I have tested kexec to Nuri board using Exynos4210(Dual-core ARM Cortex-A9) on the latest mainline kernel but i am facing one problem.
The kernel enabled SMP,
kernel_kexec()callsmachine_shutdownto stop all cpus except current cpu and jumps to the new kernel but the kernel is hanged soon.I used
cpu_down(1)to make disabled cpu1 instead ofsmp_send_stopofmachine_shutdownand it is booted successfully to new kernel.Any ideas?
I suspect that the secondary CPUs are not being parked correctly in the first kernel. For this, you need to implement
platform_cpu_killfor your platform.Given that exynos just does:
Quoted 7 lines
int
platform_cpu_kill(unsigned int cpu){ return 1; }then I'm not surprised it doesn't work. Try adding something in there which puts the CPU into a state where it can be booted by the next kernel.
Thanks, i will try it.
One more question, generally boot cpu is first cpu(cpu0). If current cpu is secondary cpu(cpu1), smp_send_stop of machine_shutdown will stop first cpu and next kernel will try to boot on secondary cpu. Is it possible?
Quoted 8 lines
I considered adding a purely software mechanism for doing this (in fact, I prototyped something up on vexpress) but after discussions with some board maintainers it became clear that most SMP SoCs have hardware assists for hotplug, and the software approach is really only need for things like the ARM development boards.
Will
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 4 lines · Joonyoung Shim
One more question, generally boot cpu is first cpu(cpu0). If current cpu is secondary cpu(cpu1),
smp_send_stopofmachine_shutdownwill stop first cpu and next kernel will try to boot on secondary cpu. Is it possible?
I added the cpu_logical_map stuff for this, so the kernel can handle it. That said, your platform may have restrictions about the boot CPU so if it doesn't work, you'll need to taskset the kexec command to CPU 0.
Will
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 9 lines · Will Deacon
Quoted 4 lines · Joonyoung Shim
One more question, generally boot cpu is first cpu(cpu0). If current cpu is secondary cpu(cpu1),
smp_send_stopofmachine_shutdownwill stop first cpu and next kernel will try to boot on secondary cpu. Is it possible?I added the
cpu_logical_mapstuff for this, so the kernel can handle it. That said, your platform may have restrictions about the boot CPU so if it doesn't work, you'll need to taskset the kexec command to CPU 0.
Would this negatively effect kdump though where you might not be able to switch back to cpu0? I think It's best to be able to boot on any core.
-M
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 7 lines · On Wed, Jan 11, 2012 at 05:20:43PM +0000, McClintock Matthew-B29882 wrote:
Quoted 6 lines · Will Deacon
Quoted 4 lines · Joonyoung Shim
One more question, generally boot cpu is first cpu(cpu0). If current cpu is secondary cpu(cpu1),
smp_send_stopofmachine_shutdownwill stop first cpu and next kernel will try to boot on secondary cpu. Is it possible?
Quoted 7 lines
Quoted 3 lines
I added the
cpu_logical_mapstuff for this, so the kernel can handle it. That said, your platform may have restrictions about the boot CPU so if it doesn't work, you'll need to taskset the kexec command to CPU 0.Would this negatively effect kdump though where you might not be able to switch back to cpu0? I think It's best to be able to boot on any core.
Ideally, we would boot on any core. That's what the logical map is for. The problem is that you may have hardware restrictions that prevent this (for example, the secure monitor on OMAP4 is, I believe, only present on CPU 0).
Will
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec