lkml.org 
[lkml]   [2023]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 15/39] LoongArch: Switch over to GENERIC_CPU_DEVICES
    Date
    From: James Morse <james.morse@arm.com>

    Now that GENERIC_CPU_DEVICES calls arch_register_cpu(), which can be
    overridden by the arch code, switch over to this to allow common code
    to choose when the register_cpu() call is made.

    This allows topology_init() to be removed.

    This is an intermediate step to the logic being moved to drivers/acpi,
    where GENERIC_CPU_DEVICES will do the work when booting with acpi=off.

    This is a subtle change. Originally:
    - on boot, topology_init() would have marked present CPUs that
    io_master() is true for as hotplug-incapable.
    - if a CPU is hotplugged that is an io_master(), it can later be
    hot-unplugged.

    The new behaviour is that any CPU that io_master() is true for will
    now always be marked as hotplug-incapable, thus even if it was
    hotplugged, it can no longer be hot-unplugged.

    This patch also has the effect of moving the registration of CPUs from
    subsys to driver core initialisation, prior to any initcalls running.

    Signed-off-by: James Morse <james.morse@arm.com>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    ---
    Changes since RFC v2:
    * Explain the change in behaviour in the patch description
    (highlighted by Jonathan Cameron - thanks.) Add note about
    initialisation order change.
    ---
    arch/loongarch/Kconfig | 1 +
    arch/loongarch/kernel/topology.c | 29 ++---------------------------
    2 files changed, 3 insertions(+), 27 deletions(-)

    diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
    index 2bddd202470e..5bed51adc68c 100644
    --- a/arch/loongarch/Kconfig
    +++ b/arch/loongarch/Kconfig
    @@ -72,6 +72,7 @@ config LOONGARCH
    select GENERIC_CLOCKEVENTS
    select GENERIC_CMOS_UPDATE
    select GENERIC_CPU_AUTOPROBE
    + select GENERIC_CPU_DEVICES
    select GENERIC_ENTRY
    select GENERIC_GETTIMEOFDAY
    select GENERIC_IOREMAP if !ARCH_IOREMAP
    diff --git a/arch/loongarch/kernel/topology.c b/arch/loongarch/kernel/topology.c
    index 3fd166006698..bf58351beac1 100644
    --- a/arch/loongarch/kernel/topology.c
    +++ b/arch/loongarch/kernel/topology.c
    @@ -10,20 +10,13 @@

    #include <acpi/processor.h>

    -static DEFINE_PER_CPU(struct cpu, cpu_devices);
    -
    #ifdef CONFIG_HOTPLUG_CPU
    int arch_register_cpu(int cpu)
    {
    - int ret;
    struct cpu *c = &per_cpu(cpu_devices, cpu);

    - c->hotpluggable = 1;
    - ret = register_cpu(c, cpu);
    - if (ret < 0)
    - pr_warn("register_cpu %d failed (%d)\n", cpu, ret);
    -
    - return ret;
    + c->hotpluggable = !io_master(cpu);
    + return register_cpu(c, cpu);
    }
    EXPORT_SYMBOL(arch_register_cpu);

    @@ -36,21 +29,3 @@ void arch_unregister_cpu(int cpu)
    }
    EXPORT_SYMBOL(arch_unregister_cpu);
    #endif
    -
    -static int __init topology_init(void)
    -{
    - int i, ret;
    -
    - for_each_present_cpu(i) {
    - struct cpu *c = &per_cpu(cpu_devices, i);
    -
    - c->hotpluggable = !io_master(i);
    - ret = register_cpu(c, i);
    - if (ret < 0)
    - pr_warn("topology_init: register_cpu %d failed (%d)\n", i, ret);
    - }
    -
    - return 0;
    -}
    -
    -subsys_initcall(topology_init);
    --
    2.30.2
    \
     
     \ /
      Last update: 2023-10-24 17:20    [W:5.958 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site