diff mbox series

MIPS: generic: enable SMP on SMVP systems

Message ID 20211217183930.16192-1-sander@svanheule.net (mailing list archive)
State Superseded
Headers show
Series MIPS: generic: enable SMP on SMVP systems | expand

Commit Message

Sander Vanheule Dec. 17, 2021, 6:39 p.m. UTC
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.

Co-developed-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Signed-off-by: Sander Vanheule <sander@svanheule.net>
---
 arch/mips/generic/init.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Comments

Jiaxun Yang Dec. 17, 2021, 10:12 p.m. UTC | #1
在 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
Sander Vanheule Dec. 18, 2021, 9:36 a.m. UTC | #2
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 mbox series

Patch

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,