lkml.org 
[lkml]   [2012]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v3 1/2] printk: add interface for disabling recursion check
    From: ShuoX Liu <shuox.liu@intel.com>

    With some special scenario, such as Machine Check Exception happened
    in printk, we want to bypass printk recursion check to printk some
    important information. So we add these interfaces of printk.

    1) printk_recursion_check_disable() for disabling recursion check
    2) printk_recursion_check_enable() for enabling recursion check

    Signed-off-by: Yanmin Zhang <yanmin_zhang@linux.intel.com>
    Signed-off-by: ShuoX Liu <shuox.liu@intel.com>
    ---
    include/linux/printk.h | 3 +++
    kernel/printk.c | 17 ++++++++++++++++-
    2 files changed, 19 insertions(+), 1 deletions(-)

    diff --git a/include/linux/printk.h b/include/linux/printk.h
    index 1bec2f7..da48ec7 100644
    --- a/include/linux/printk.h
    +++ b/include/linux/printk.h
    @@ -42,6 +42,9 @@ static inline void console_verbose(void)
    console_loglevel = 15;
    }

    +void printk_recursion_check_disable(void);
    +void printk_recursion_check_enable(void);
    +
    struct va_format {
    const char *fmt;
    va_list *va;
    diff --git a/kernel/printk.c b/kernel/printk.c
    index 32462d2..0580f67 100644
    --- a/kernel/printk.c
    +++ b/kernel/printk.c
    @@ -78,6 +78,19 @@ int console_printk[4] = {
    int oops_in_progress;
    EXPORT_SYMBOL(oops_in_progress);

    +static atomic_t recursion_check_disabled = ATOMIC_INIT(0);
    +
    +void printk_recursion_check_disable(void)
    +{
    + atomic_inc(&recursion_check_disabled);
    +}
    +
    +void printk_recursion_check_enable(void)
    +{
    + WARN_ON(atomic_read(&recursion_check_disabled) < 1);
    + atomic_dec(&recursion_check_disabled);
    +}
    +
    /*
    * console_sem protects the console_drivers list, and also
    * provides serialisation for access to the entire console
    @@ -1295,7 +1308,9 @@ asmlinkage int vprintk_emit(int facility, int level,
    * recursion and return - but flag the recursion so that
    * it can be printed at the next appropriate moment:
    */
    - if (!oops_in_progress && !lockdep_recursing(current)) {
    + if (!atomic_read(&recursion_check_disabled)
    + && !oops_in_progress
    + && !lockdep_recursing(current)) {
    recursion_bug = 1;
    goto out_restore_irqs;
    }
    --
    1.7.1


    \
     
     \ /
      Last update: 2012-05-28 05:41    [W:0.025 / U:0.240 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site