Message ID | 20211217183930.16192-1-sander@svanheule.net (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | MIPS: generic: enable SMP on SMVP systems | expand |
在 2021/12/17 18:39, Sander Vanheule 写道: > In addition to CPS SMP setups, also try to initialise MT SMP setups with > multiple VPEs per CPU core. CMP SMP support is not provided as it is > considered deprecated. > > Additionally, rework the code by dropping the err variable and make it > similar to how other platforms perform this initialisation. Hi, Thanks for your patch :-) However there is a probem that register_vsmp_smp_ops never returns error if CONFIG_MIPS_MT_SMP is enabled. But generic kernel is supposed to run on systems with & without MT. So probably you need: diff --git a/arch/mips/include/asm/smp-ops.h b/arch/mips/include/asm/smp-ops.h index 65618ff1280c..864aea803984 100644 --- a/arch/mips/include/asm/smp-ops.h +++ b/arch/mips/include/asm/smp-ops.h @@ -101,6 +101,9 @@ static inline int register_vsmp_smp_ops(void) #ifdef CONFIG_MIPS_MT_SMP extern const struct plat_smp_ops vsmp_smp_ops; + if (!cpu_has_mipsmt) + return -ENODEV; + register_smp_ops(&vsmp_smp_ops); return 0; Thanks. - Jiaxun
Hi Jiaxun, On Fri, 2021-12-17 at 22:12 +0000, Jiaxun Yang wrote: > > > 在 2021/12/17 18:39, Sander Vanheule 写道: > > In addition to CPS SMP setups, also try to initialise MT SMP setups with > > multiple VPEs per CPU core. CMP SMP support is not provided as it is > > considered deprecated. > > > > Additionally, rework the code by dropping the err variable and make it > > similar to how other platforms perform this initialisation. > Hi, > > Thanks for your patch :-) > > However there is a probem that register_vsmp_smp_ops never returns error > if CONFIG_MIPS_MT_SMP is enabled. But generic kernel is supposed to > run on systems with & without MT. > > So probably you need: > > diff --git a/arch/mips/include/asm/smp-ops.h > b/arch/mips/include/asm/smp-ops.h > index 65618ff1280c..864aea803984 100644 > --- a/arch/mips/include/asm/smp-ops.h > +++ b/arch/mips/include/asm/smp-ops.h > @@ -101,6 +101,9 @@ static inline int register_vsmp_smp_ops(void) > #ifdef CONFIG_MIPS_MT_SMP > extern const struct plat_smp_ops vsmp_smp_ops; > > + if (!cpu_has_mipsmt) > + return -ENODEV; > + > register_smp_ops(&vsmp_smp_ops); > > return 0; Thanks for the feedback, I was wondering if we had missed something :) I'll send a v2 (series) including this addition. Best, Sander
diff --git a/arch/mips/generic/init.c b/arch/mips/generic/init.c index 1842cddd8356..1d712eac1617 100644 --- a/arch/mips/generic/init.c +++ b/arch/mips/generic/init.c @@ -110,14 +110,15 @@ void __init plat_mem_setup(void) void __init device_tree_init(void) { - int err; - unflatten_and_copy_device_tree(); mips_cpc_probe(); - err = register_cps_smp_ops(); - if (err) - err = register_up_smp_ops(); + if (!register_cps_smp_ops()) + return; + if (!register_vsmp_smp_ops()) + return; + + register_up_smp_ops(); } int __init apply_mips_fdt_fixups(void *fdt_out, size_t fdt_out_size,