lkml.org 
[lkml]   [2004]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC/PATCH 3/4] introduce cpu_add and cpu_remove

    These functions safely update cpu_present_map (i.e. with the
    cpucontrol semaphore held) and register or unregister the cpu device
    as needed. These are needed by systems which can add or remove cpus
    from the system after boot (e.g. ppc64 and ia64), and are intended to
    be called from the platform-specific code such as the ACPI or Open
    Firmware layers.

    Signed-off-by: Nathan Lynch <nathanl@austin.ibm.com>


    ---


    diff -puN include/linux/cpu.h~introduce-cpu_add-and-cpu_remove include/linux/cpu.h
    --- 2.6.10-rc1/include/linux/cpu.h~introduce-cpu_add-and-cpu_remove 2004-10-24 03:52:59.000000000 -0500
    +++ 2.6.10-rc1-nathanl/include/linux/cpu.h 2004-10-24 03:52:59.000000000 -0500
    @@ -67,6 +67,8 @@ extern struct semaphore cpucontrol;
    register_cpu_notifier(&fn##_nb); \
    }
    int cpu_down(unsigned int cpu);
    +unsigned int cpu_add(void);
    +void cpu_remove(unsigned int);
    #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
    #else
    #define lock_cpu_hotplug() do { } while (0)
    diff -puN kernel/cpu.c~introduce-cpu_add-and-cpu_remove kernel/cpu.c
    --- 2.6.10-rc1/kernel/cpu.c~introduce-cpu_add-and-cpu_remove 2004-10-24 03:52:59.000000000 -0500
    +++ 2.6.10-rc1-nathanl/kernel/cpu.c 2004-10-24 03:52:59.000000000 -0500
    @@ -180,6 +180,49 @@ out:
    unlock_cpu_hotplug();
    return err;
    }
    +
    +/*
    + * Add a cpu to the system. Return the number of the cpu added,
    + * or NR_CPUS if no more slots available.
    + */
    +unsigned int cpu_add(void)
    +{
    + unsigned int cpu = NR_CPUS;
    +
    + lock_cpu_hotplug();
    +
    + if (num_present_cpus() == num_possible_cpus())
    + goto out;
    +
    + for_each_cpu(cpu)
    + if (!cpu_present(cpu))
    + break;
    +
    + if (register_cpu(cpu)) {
    + cpu = NR_CPUS;
    + goto out;
    + }
    + cpu_set(cpu, cpu_present_map);
    +out:
    + unlock_cpu_hotplug();
    + return cpu;
    +}
    +
    +/*
    + * Remove a cpu from the system.
    + */
    +void cpu_remove(unsigned int cpu)
    +{
    + lock_cpu_hotplug();
    +
    + BUG_ON(cpu_present(cpu));
    +
    + unregister_cpu(cpu);
    +
    + cpu_clear(cpu, cpu_present_map);
    +
    + unlock_cpu_hotplug();
    +}
    #else
    static inline int cpu_run_sbin_hotplug(unsigned int cpu, const char *action)
    {
    _
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:07    [W:0.024 / U:29.916 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site