On Tue, Jul 6, 2021 at 6:18 AM Huacai Chen <chenhuacai@xxxxxxxxxxx> wrote: > +const struct plat_smp_ops loongson3_smp_ops = { > + .send_ipi_single = loongson3_send_ipi_single, > + .send_ipi_mask = loongson3_send_ipi_mask, > + .smp_setup = loongson3_smp_setup, > + .prepare_cpus = loongson3_prepare_cpus, > + .boot_secondary = loongson3_boot_secondary, > + .init_secondary = loongson3_init_secondary, > + .smp_finish = loongson3_smp_finish, > +#ifdef CONFIG_HOTPLUG_CPU > + .cpu_disable = loongson3_cpu_disable, > + .cpu_die = loongson3_cpu_die, > +#endif > +}; I would hope that these functions can be used across platforms without an abstraction layer in-between. Are these not all part of the either the CPU architecture definition or the firmware interface? Do you even expect to see non-SMP systems deployed widely enough that SMP support must be optional? On arch/arm64 we ended up always building SMP support into the kernel because practically everyone wants it. Arnd