lkml.org 
[lkml]   [2007]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [23/26] i386: Allow boot-time disable of SMP altinstructions
    Date

    From: Jeremy Fitzhardinge <jeremy@goop.org>
    Add "noreplace-smp" to disable SMP instruction replacement.

    Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
    Signed-off-by: Andi Kleen <ak@suse.de>

    ---
    Documentation/kernel-parameters.txt | 6 ++++++
    arch/i386/kernel/alternative.c | 23 +++++++++++++++++++----
    2 files changed, 25 insertions(+), 4 deletions(-)

    ===================================================================
    Index: linux/Documentation/kernel-parameters.txt
    ===================================================================
    --- linux.orig/Documentation/kernel-parameters.txt
    +++ linux/Documentation/kernel-parameters.txt
    @@ -1142,6 +1142,9 @@ and is between 256 and 4096 characters.

    nomce [IA-32] Machine Check Exception

    + noreplace-smp [IA-32,SMP] Don't replace SMP instructions
    + with UP alternatives
    +
    noresidual [PPC] Don't use residual data on PReP machines.

    noresume [SWSUSP] Disables resume and restores original swap
    @@ -1547,6 +1550,9 @@ and is between 256 and 4096 characters.
    smart2= [HW]
    Format: <io1>[,<io2>[,...,<io8>]]

    + smp-alt-once [IA-32,SMP] On a hotplug CPU system, only
    + attempt to substitute SMP alternatives once at boot.
    +
    snd-ad1816a= [HW,ALSA]

    snd-ad1848= [HW,ALSA]
    Index: linux/arch/i386/kernel/alternative.c
    ===================================================================
    --- linux.orig/arch/i386/kernel/alternative.c
    +++ linux/arch/i386/kernel/alternative.c
    @@ -5,6 +5,7 @@
    #include <asm/alternative.h>
    #include <asm/sections.h>

    +static int noreplace_smp = 0;
    static int smp_alt_once = 0;
    static int debug_alternative = 0;

    @@ -13,15 +14,23 @@ static int __init bootonly(char *str)
    smp_alt_once = 1;
    return 1;
    }
    +__setup("smp-alt-boot", bootonly);
    +
    static int __init debug_alt(char *str)
    {
    debug_alternative = 1;
    return 1;
    }
    -
    -__setup("smp-alt-boot", bootonly);
    __setup("debug-alternative", debug_alt);

    +static int __init setup_noreplace_smp(char *str)
    +{
    + noreplace_smp = 1;
    + return 1;
    +}
    +__setup("noreplace-smp", setup_noreplace_smp);
    +
    +
    #define DPRINTK(fmt, args...) if (debug_alternative) \
    printk(KERN_DEBUG fmt, args)

    @@ -185,6 +194,9 @@ static void alternatives_smp_unlock(u8 *
    {
    u8 **ptr;

    + if (noreplace_smp)
    + return;
    +
    for (ptr = start; ptr < end; ptr++) {
    if (*ptr < text)
    continue;
    @@ -219,6 +231,9 @@ void alternatives_smp_module_add(struct
    struct smp_alt_module *smp;
    unsigned long flags;

    + if (noreplace_smp)
    + return;
    +
    if (smp_alt_once) {
    if (boot_cpu_has(X86_FEATURE_UP))
    alternatives_smp_unlock(locks, locks_end,
    @@ -253,7 +268,7 @@ void alternatives_smp_module_del(struct
    struct smp_alt_module *item;
    unsigned long flags;

    - if (smp_alt_once)
    + if (smp_alt_once || noreplace_smp)
    return;

    spin_lock_irqsave(&smp_alt, flags);
    @@ -284,7 +299,7 @@ void alternatives_smp_switch(int smp)
    return;
    #endif

    - if (smp_alt_once)
    + if (noreplace_smp || smp_alt_once)
    return;
    BUG_ON(!smp && (num_online_cpus() > 1));

    -
    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: 2007-04-30 01:55    [W:0.044 / U:90.576 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site