lkml.org 
[lkml]   [2010]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/5] x86, lib: Add wbinvd smp helpers
    Date
    From: Borislav Petkov <borislav.petkov@amd.com>

    Add wbinvd_on_cpu and wbinvd_on_all_cpus stubs for executing wbinvd on a
    particular CPU.

    Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
    ---
    arch/x86/include/asm/smp.h | 5 +++++
    arch/x86/lib/Makefile | 1 +
    arch/x86/lib/smp.c | 19 +++++++++++++++++++
    3 files changed, 25 insertions(+), 0 deletions(-)
    create mode 100644 arch/x86/lib/smp.c

    diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
    index 1e79678..82e675b 100644
    --- a/arch/x86/include/asm/smp.h
    +++ b/arch/x86/include/asm/smp.h
    @@ -135,6 +135,8 @@ int native_cpu_disable(void);
    void native_cpu_die(unsigned int cpu);
    void native_play_dead(void);
    void play_dead_common(void);
    +void wbinvd_on_cpu(int cpu);
    +int wbinvd_on_all_cpus(void);

    void native_send_call_func_ipi(const struct cpumask *mask);
    void native_send_call_func_single_ipi(int cpu);
    @@ -147,6 +149,9 @@ static inline int num_booting_cpus(void)
    {
    return cpumask_weight(cpu_callout_mask);
    }
    +#else /* !CONFIG_SMP */
    +#define wbinvd_on_cpu(cpu) wbinvd()
    +#define wbinvd_on_all_cpus() wbinvd()
    #endif /* CONFIG_SMP */

    extern unsigned disabled_cpus __cpuinitdata;
    diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile
    index cffd754..171cb14 100644
    --- a/arch/x86/lib/Makefile
    +++ b/arch/x86/lib/Makefile
    @@ -15,6 +15,7 @@ $(obj)/inat.o: $(obj)/inat-tables.c
    clean-files := inat-tables.c

    obj-$(CONFIG_SMP) += msr-smp.o
    +obj-$(CONFIG_SMP) += smp.o

    lib-y := delay.o
    lib-y += thunk_$(BITS).o
    diff --git a/arch/x86/lib/smp.c b/arch/x86/lib/smp.c
    new file mode 100644
    index 0000000..a3c6688
    --- /dev/null
    +++ b/arch/x86/lib/smp.c
    @@ -0,0 +1,19 @@
    +#include <linux/smp.h>
    +#include <linux/module.h>
    +
    +static void __wbinvd(void *dummy)
    +{
    + wbinvd();
    +}
    +
    +void wbinvd_on_cpu(int cpu)
    +{
    + smp_call_function_single(cpu, __wbinvd, NULL, 1);
    +}
    +EXPORT_SYMBOL(wbinvd_on_cpu);
    +
    +int wbinvd_on_all_cpus(void)
    +{
    + return on_each_cpu(__wbinvd, NULL, 1);
    +}
    +EXPORT_SYMBOL(wbinvd_on_all_cpus);
    --
    1.6.6


    \
     
     \ /
      Last update: 2010-01-22 16:05    [W:0.024 / U:208.708 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site