lkml.org 
[lkml]   [2007]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH x86 for review II] [23/39] i386: use smp_call_function_single()
    Date

    From: Alexey Dobriyan <adobriyan@openvz.org>
    It will execute rdmsr and wrmsr only on the cpu we need.

    Signed-off-by: Alexey Dobriyan <adobriyan@openvz.org>
    Signed-off-by: Andi Kleen <ak@suse.de>

    ---

    arch/i386/kernel/msr.c | 13 ++++---------
    1 file changed, 4 insertions(+), 9 deletions(-)

    Index: linux/arch/i386/kernel/msr.c
    ===================================================================
    --- linux.orig/arch/i386/kernel/msr.c
    +++ linux/arch/i386/kernel/msr.c
    @@ -68,7 +68,6 @@ static inline int rdmsr_eio(u32 reg, u32
    #ifdef CONFIG_SMP

    struct msr_command {
    - int cpu;
    int err;
    u32 reg;
    u32 data[2];
    @@ -78,16 +77,14 @@ static void msr_smp_wrmsr(void *cmd_bloc
    {
    struct msr_command *cmd = (struct msr_command *)cmd_block;

    - if (cmd->cpu == smp_processor_id())
    - cmd->err = wrmsr_eio(cmd->reg, cmd->data[0], cmd->data[1]);
    + cmd->err = wrmsr_eio(cmd->reg, cmd->data[0], cmd->data[1]);
    }

    static void msr_smp_rdmsr(void *cmd_block)
    {
    struct msr_command *cmd = (struct msr_command *)cmd_block;

    - if (cmd->cpu == smp_processor_id())
    - cmd->err = rdmsr_eio(cmd->reg, &cmd->data[0], &cmd->data[1]);
    + cmd->err = rdmsr_eio(cmd->reg, &cmd->data[0], &cmd->data[1]);
    }

    static inline int do_wrmsr(int cpu, u32 reg, u32 eax, u32 edx)
    @@ -99,12 +96,11 @@ static inline int do_wrmsr(int cpu, u32
    if (cpu == smp_processor_id()) {
    ret = wrmsr_eio(reg, eax, edx);
    } else {
    - cmd.cpu = cpu;
    cmd.reg = reg;
    cmd.data[0] = eax;
    cmd.data[1] = edx;

    - smp_call_function(msr_smp_wrmsr, &cmd, 1, 1);
    + smp_call_function_single(cpu, msr_smp_wrmsr, &cmd, 1, 1);
    ret = cmd.err;
    }
    preempt_enable();
    @@ -120,10 +116,9 @@ static inline int do_rdmsr(int cpu, u32
    if (cpu == smp_processor_id()) {
    ret = rdmsr_eio(reg, eax, edx);
    } else {
    - cmd.cpu = cpu;
    cmd.reg = reg;

    - smp_call_function(msr_smp_rdmsr, &cmd, 1, 1);
    + smp_call_function_single(cpu, msr_smp_rdmsr, &cmd, 1, 1);

    *eax = cmd.data[0];
    *edx = cmd.data[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-02-12 08:43    [W:4.571 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site