Skip to contentSkip to conversation

ARM kexec SMP problem using exynos4210

DISCUSSION Joonyoung Shim 3 participants 6 messages Jan 11, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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() 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?

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

#2 lore raw
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() 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?

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:

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

#3 lore raw
Quoted 4 lines · Joonyoung Shim

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?

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

#4 lore raw
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_stop of machine_shutdown will 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.

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

#5 lore raw
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_stop of machine_shutdown will 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_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.

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