lkml.org 
[lkml]   [2015]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 15/17] printk/percpu: Define printk_func when printk is not defined
    Date
    From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>

    commit 04b74b27c2941e5d62120f6fee3a0a9388a30613 upstream.

    To avoid include hell, the per_cpu variable printk_func was declared
    in percpu.h. But it is only defined if printk is defined.

    As users of printk may also use the printk_func variable, it needs to
    be defined even if CONFIG_PRINTK is not.

    Also add a printk.h include in percpu.h just to be safe.

    Link: http://lkml.kernel.org/r/20141121183215.01ba539c@canb.auug.org.au

    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    [wanglong: backport to 3.10 stable
    - adjust context
    ]
    Signed-off-by: Wang Long <long.wanglong@huawei.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    include/linux/percpu.h | 1 +
    include/linux/printk.h | 4 ++--
    kernel/printk.c | 3 +++
    3 files changed, 6 insertions(+), 2 deletions(-)

    diff --git a/include/linux/percpu.h b/include/linux/percpu.h
    index bb1d29c..60e425e 100644
    --- a/include/linux/percpu.h
    +++ b/include/linux/percpu.h
    @@ -4,6 +4,7 @@
    #include <linux/preempt.h>
    #include <linux/smp.h>
    #include <linux/cpumask.h>
    +#include <linux/printk.h>
    #include <linux/pfn.h>
    #include <linux/init.h>

    diff --git a/include/linux/printk.h b/include/linux/printk.h
    index ebc7f3e..14b4098 100644
    --- a/include/linux/printk.h
    +++ b/include/linux/printk.h
    @@ -106,6 +106,8 @@ static inline __printf(1, 2) __cold
    void early_printk(const char *s, ...) { }
    #endif

    +typedef int(*printk_func_t)(const char *fmt, va_list args);
    +
    #ifdef CONFIG_PRINTK
    asmlinkage __printf(5, 0)
    int vprintk_emit(int facility, int level,
    @@ -144,8 +146,6 @@ extern int kptr_restrict;

    extern void wake_up_klogd(void);

    -typedef int(*printk_func_t)(const char *fmt, va_list args);
    -
    void log_buf_kexec_setup(void);
    void __init setup_log_buf(int early);
    void dump_stack_set_arch_desc(const char *fmt, ...);
    diff --git a/kernel/printk.c b/kernel/printk.c
    index d3d929d..7109b38 100644
    --- a/kernel/printk.c
    +++ b/kernel/printk.c
    @@ -1746,6 +1746,9 @@ static size_t msg_print_text(const struct log *msg, enum log_flags prev,
    bool syslog, char *buf, size_t size) { return 0; }
    static size_t cont_print_text(char *text, size_t size) { return 0; }

    +/* Still needs to be defined for users */
    +DEFINE_PER_CPU(printk_func_t, printk_func);
    +
    #endif /* CONFIG_PRINTK */

    #ifdef CONFIG_EARLY_PRINTK
    --
    1.8.3.4


    \
     
     \ /
      Last update: 2015-05-14 14:21    [W:4.989 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site