Message ID | 1612249487-37379-1-git-send-email-bmeng.cn@gmail.com |
---|---|
State | Accepted |
Commit | 8cd1a0cf5205a65503351945df3cdbea1a908c15 |
Delegated to: | Bin Meng |
Headers | show |
Series | x86: qemu: Fix broken multi-core boot | expand |
On Tue, 2 Feb 2021 at 00:05, Bin Meng <bmeng.cn@gmail.com> wrote: > > Unfortunately the multi-core boot for QEMU x86 has been broken since > commit 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start"). > > In order to support QEMU x86 multi-core boot, the /cpus node must be > bound before any actual fix up in qemu_cpu_fixup(). This adds the > uclass_get() call to ensure this, just like what was done before. > > Fixes: 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start") > Signed-off-by: Bin Meng <bmeng.cn@gmail.com> > --- > > arch/x86/cpu/qfw_cpu.c | 6 ++++++ > 1 file changed, 6 insertions(+) Reviewed-by: Simon Glass <sjg@chromium.org>
On Wed, Feb 3, 2021 at 9:00 PM Simon Glass <sjg@chromium.org> wrote: > > On Tue, 2 Feb 2021 at 00:05, Bin Meng <bmeng.cn@gmail.com> wrote: > > > > Unfortunately the multi-core boot for QEMU x86 has been broken since > > commit 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start"). > > > > In order to support QEMU x86 multi-core boot, the /cpus node must be > > bound before any actual fix up in qemu_cpu_fixup(). This adds the > > uclass_get() call to ensure this, just like what was done before. > > > > Fixes: 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start") > > Signed-off-by: Bin Meng <bmeng.cn@gmail.com> > > --- > > > > arch/x86/cpu/qfw_cpu.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > Reviewed-by: Simon Glass <sjg@chromium.org> applied to u-boot-x86, thanks!
diff --git a/arch/x86/cpu/qfw_cpu.c b/arch/x86/cpu/qfw_cpu.c index a35de87..b959ead 100644 --- a/arch/x86/cpu/qfw_cpu.c +++ b/arch/x86/cpu/qfw_cpu.c @@ -17,10 +17,16 @@ int qemu_cpu_fixup(void) int ret; int cpu_num; int cpu_online; + struct uclass *uc; struct udevice *dev, *pdev; struct cpu_plat *plat; char *cpu; + /* This will cause the CPUs devices to be bound */ + ret = uclass_get(UCLASS_CPU, &uc); + if (ret) + return ret; + /* first we need to find '/cpus' */ for (device_find_first_child(dm_root(), &pdev); pdev;
Unfortunately the multi-core boot for QEMU x86 has been broken since commit 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start"). In order to support QEMU x86 multi-core boot, the /cpus node must be bound before any actual fix up in qemu_cpu_fixup(). This adds the uclass_get() call to ensure this, just like what was done before. Fixes: 77a5e2d3bc61 ("x86: mp_init: Set up the CPU numbers at the start") Signed-off-by: Bin Meng <bmeng.cn@gmail.com> --- arch/x86/cpu/qfw_cpu.c | 6 ++++++ 1 file changed, 6 insertions(+)