2021-12-17 18:40:14

by Sander Vanheule

[permalink] [raw]
Subject: [PATCH] MIPS: generic: enable SMP on SMVP systems

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 <[email protected]>
Signed-off-by: INAGAKI Hiroshi <[email protected]>
Signed-off-by: Sander Vanheule <[email protected]>
---
arch/mips/generic/init.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)

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,
--
2.33.1



2021-12-17 22:12:28

by Jiaxun Yang

[permalink] [raw]
Subject: Re: [PATCH] MIPS: generic: enable SMP on SMVP systems



在 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

2021-12-18 09:36:40

by Sander Vanheule

[permalink] [raw]
Subject: Re: [PATCH] MIPS: generic: enable SMP on SMVP systems

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