[lkml]   [2012]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[RFC PATCH v2 00/10][RESEND] CPU hotplug: stop_machine()-free CPU hotplug
    [Resending because I forgot to CC lkml last time. Please send your replies to
    this thread instead of the previous (non-public) one. Sorry for the trouble!]


    This patchset removes CPU hotplug's dependence on stop_machine() from the CPU
    offline path and provides an alternative (set of APIs) to preempt_disable() to
    prevent CPUs from going offline, which can be invoked from atomic context.

    This is an RFC patchset with only a few call-sites of preempt_disable()
    converted to the new APIs for now, and the main goal is to get feedback on the
    design of the new atomic APIs and see if it serves as a viable replacement for
    stop_machine()-free CPU hotplug.

    Overview of the patches:

    Patch 1 introduces the new APIs that can be used from atomic context, to
    prevent CPUs from going offline. This set of APIs is for "light" atomic
    hotplug readers (the term "light" is explained in the changelog/comments).

    Patch 2 introduces the new APIs for "full" atomic hotplug readers.

    Patch 3 is a cleanup; it converts preprocessor macros to static inline

    Patches 4 to 9 convert various call-sites to use the new APIs.
    (Patches 4 to 8 deal with "light" readers, patch 9 deals with a "full"
    reader. Together, they demonstrate how to use these APIs effectively).

    Patch 10 is the one which actually removes stop_machine() from the CPU
    offline path.

    Changes in v2:
    * Completely redesigned the synchronization scheme to avoid using any extra

    * Provided APIs for 2 types of atomic hotplug readers: "light" (for
    light-weight) and "full". We wish to have more "light" readers than
    the "full" ones, to avoid indirectly inducing the "stop_machine effect"
    without even actually using stop_machine().

    And the patches show that it _is_ generally true: 5 patches deal with
    "light" readers, whereas only 1 patch deals with a "full" reader.

    Also, the "light" readers happen to be in very hot paths. So it makes a
    lot of sense to have such a distinction and a corresponding light-weight


    Comments and suggestions welcome!

    Paul E. McKenney (1):
    cpu: No more __stop_machine() in _cpu_down()

    Srivatsa S. Bhat (9):
    CPU hotplug: Provide APIs for "light" atomic readers to prevent CPU offline
    CPU hotplug: Provide APIs for "full" atomic readers to prevent CPU offline
    CPU hotplug: Convert preprocessor macros to static inline functions
    smp, cpu hotplug: Fix smp_call_function_*() to prevent CPU offline properly
    smp, cpu hotplug: Fix on_each_cpu_*() to prevent CPU offline properly
    sched, cpu hotplug: Use stable online cpus in try_to_wake_up() & select_task_rq()
    kick_process(), cpu-hotplug: Prevent offlining of target CPU properly
    yield_to(), cpu-hotplug: Prevent offlining of other CPUs properly
    kvm, vmx: Add full atomic synchronization with CPU Hotplug

    arch/x86/kvm/vmx.c | 8 ++-
    include/linux/cpu.h | 12 ++++-
    kernel/cpu.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++-
    kernel/sched/core.c | 22 +++++++-
    kernel/smp.c | 64 +++++++++++++++---------
    5 files changed, 210 insertions(+), 32 deletions(-)

    Srivatsa S. Bhat
    IBM Linux Technology Center

     \ /
      Last update: 2012-12-05 20:21    [W:0.026 / U:27.464 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site