lkml.org 
[lkml]   [2007]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 5/6] Allow boot-time disable of SMP altinstructions
    Add "noreplace-smp" to disable SMP instruction replacement.

    Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>

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

    ===================================================================
    --- a/Documentation/kernel-parameters.txt
    +++ b/Documentation/kernel-parameters.txt
    @@ -1134,6 +1134,9 @@ and is between 256 and 4096 characters.
    nomca [IA-64] Disable machine check abort handling

    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.

    @@ -1540,6 +1543,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]
    ===================================================================
    --- a/arch/i386/kernel/alternative.c
    +++ b/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,14 +14,22 @@ 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;
    @@ -218,6 +230,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))
    @@ -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-04 03:39    [W:0.023 / U:3.608 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site