lkml.org 
[lkml]   [2013]   [Sep]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 8/9] x86/UV: Add uvtrace support
    This patch adds support for the uvtrace module by providing a skeleton
    call to the registered trace function. It also provides another separate
    'NMI' tracer that is triggered by the system wide 'power nmi' command.

    Signed-off-by: Mike Travis <travis@sgi.com>
    Reviewed-by: Dimitri Sivanich <sivanich@sgi.com>
    Reviewed-by: Hedi Berriche <hberrich@sgi.com>
    ---
    arch/x86/include/asm/uv/uv.h | 8 ++++++++
    arch/x86/platform/uv/uv_nmi.c | 13 ++++++++++++-
    2 files changed, 20 insertions(+), 1 deletion(-)

    --- linux.orig/arch/x86/include/asm/uv/uv.h
    +++ linux/arch/x86/include/asm/uv/uv.h
    @@ -14,6 +14,13 @@ extern void uv_cpu_init(void);
    extern void uv_nmi_init(void);
    extern void uv_register_nmi_notifier(void);
    extern void uv_system_init(void);
    +extern void (*uv_trace_nmi_func)(unsigned int reason, struct pt_regs *regs);
    +extern void (*uv_trace_func)(const char *f, const int l, const char *fmt, ...);
    +#define uv_trace(fmt, ...) \
    +do { \
    + if (unlikely(uv_trace_func)) \
    + (uv_trace_func)(__func__, __LINE__, fmt, ##__VA_ARGS__);\
    +} while (0)
    extern const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask,
    struct mm_struct *mm,
    unsigned long start,
    @@ -26,6 +33,7 @@ static inline enum uv_system_type get_uv
    static inline int is_uv_system(void) { return 0; }
    static inline void uv_cpu_init(void) { }
    static inline void uv_system_init(void) { }
    +static inline void uv_trace(void *fmt, ...) { }
    static inline void uv_register_nmi_notifier(void) { }
    static inline const struct cpumask *
    uv_flush_tlb_others(const struct cpumask *cpumask, struct mm_struct *mm,
    --- linux.orig/arch/x86/platform/uv/uv_nmi.c
    +++ linux/arch/x86/platform/uv/uv_nmi.c
    @@ -1,5 +1,5 @@
    /*
    - * SGI NMI support routines
    + * SGI NMI/TRACE support routines
    *
    * This program is free software; you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    @@ -39,6 +39,13 @@
    #include <asm/uv/uv_hub.h>
    #include <asm/uv/uv_mmrs.h>

    +void (*uv_trace_func)(const char *f, const int l, const char *fmt, ...);
    +EXPORT_SYMBOL(uv_trace_func);
    +
    +void (*uv_trace_nmi_func)(unsigned int reason, struct pt_regs *regs);
    +EXPORT_SYMBOL(uv_trace_nmi_func);
    +
    +
    /*
    * UV handler for NMI
    *
    @@ -592,6 +599,10 @@ int uv_handle_nmi(unsigned int reason, s
    return NMI_DONE;
    }

    + /* Call possible NMI trace function */
    + if (unlikely(uv_trace_nmi_func))
    + (uv_trace_nmi_func)(reason, regs);
    +
    /* Indicate we are the first CPU into the NMI handler */
    master = (atomic_read(&uv_nmi_cpu) == cpu);

    --


    \
     
     \ /
      Last update: 2013-09-06 01:41    [W:4.411 / U:1.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site