Re: [PATCH -mm] __ratelimit rewrite

From: Dave Young
Date: Sun May 04 2008 - 22:27:35 EST


On Mon, May 5, 2008 at 9:37 AM, Dave Young <hidave.darkstar@xxxxxxxxx> wrote:
> Hi,
> Thanks for comment.
>
>
> On Sun, May 4, 2008 at 10:47 PM, Joe Perches <joe@xxxxxxxxxxx> wrote:
> > On Sun, 2008-05-04 at 15:07 +0800, Dave Young wrote:
> > > diff -uprN linux/include/linux/kernel.h linux.new/include/linux/kernel.h
> > > --- linux/include/linux/kernel.h 2008-04-30 17:33:59.000000000 +0800
> > > +++ linux.new/include/linux/kernel.h 2008-04-30 17:33:52.000000000 +0800
> > > @@ -14,6 +14,7 @@
> > > #include <linux/compiler.h>
> > > #include <linux/bitops.h>
> > > #include <linux/log2.h>
> > > +#include <linux/ratelimit.h>
> > > #include <asm/byteorder.h>
> > > #include <asm/bug.h>
> >
> > Good idea.
> >
> > I think #include <linux/printk.h>
> > and a reorganization of all the printk related
> > elements from kernel.h to printk.h would be better
> > and should be done first.

If split printk.h from kernel.h, then kernel.h had better don't
include printk.h.
Instead every printk user include "printk.h". This seems too much changes.

Right?

>
> Sounds good.
>
>
> >
> > I think your changes should then be done in
> > printk.h not creating a new ratelimit.h.
>
> IMO ratelimit is not just for printk use now, so a standalone head
> file is necessary.
>
>
>
> >
> > Signed-off-by: Joe Perches <joe@xxxxxxxxxxx>
> > ---
> > include/linux/kernel.h | 113 +---------------------------------------
> > include/linux/printk.h | 137 ++++++++++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 138 insertions(+), 112 deletions(-)
> >
> > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> > index 4d46e29..51ae259 100644
> > --- a/include/linux/kernel.h
> > +++ b/include/linux/kernel.h
> >
> > @@ -14,6 +14,7 @@
> > #include <linux/compiler.h>
> > #include <linux/bitops.h>
> > #include <linux/log2.h>
> > +#include <linux/printk.h>
> >
> > #include <asm/byteorder.h>
> > #include <asm/bug.h>
> >
> > @@ -70,29 +71,6 @@ extern const char linux_proc_banner[];
> > */
> > #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
> >
> > -#define KERN_EMERG "<0>" /* system is unusable */
> > -#define KERN_ALERT "<1>" /* action must be taken immediately */
> > -#define KERN_CRIT "<2>" /* critical conditions */
> > -#define KERN_ERR "<3>" /* error conditions */
> > -#define KERN_WARNING "<4>" /* warning conditions */
> > -#define KERN_NOTICE "<5>" /* normal but significant condition */
> > -#define KERN_INFO "<6>" /* informational */
> > -#define KERN_DEBUG "<7>" /* debug-level messages */
> > -
> > -/*
> > - * Annotation for a "continued" line of log printout (only done after a
> > - * line that had no enclosing \n). Only to be used by core/arch code
> > - * during early bootup (a continued line is not SMP-safe otherwise).
> > - */
> > -#define KERN_CONT ""
> > -
> > -extern int console_printk[];
> > -
> > -#define console_loglevel (console_printk[0])
> > -#define default_message_loglevel (console_printk[1])
> > -#define minimum_console_loglevel (console_printk[2])
> > -#define default_console_loglevel (console_printk[3])
> > -
> > struct completion;
> > struct pt_regs;
> > struct user;
> > @@ -179,56 +157,8 @@ extern int kernel_text_address(unsigned long addr);
> > struct pid;
> > extern struct pid *session_of_pgrp(struct pid *pgrp);
> >
> > -#ifdef CONFIG_PRINTK
> > -asmlinkage int vprintk(const char *fmt, va_list args)
> > - __attribute__ ((format (printf, 1, 0)));
> > -asmlinkage int printk(const char * fmt, ...)
> > - __attribute__ ((format (printf, 1, 2))) __cold;
> > -extern int log_buf_get_len(void);
> >
> > -extern int log_buf_read(int idx);
> > -extern int log_buf_copy(char *dest, int idx, int len);
> > -
> > -extern int printk_ratelimit_jiffies;
> > -extern int printk_ratelimit_burst;
> > -extern int printk_ratelimit(void);
> >
> > -extern int __ratelimit(int ratelimit_jiffies, int ratelimit_burst);
> > -extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst);
> > -extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
> > - unsigned int interval_msec);
> > -#else
> > -static inline int vprintk(const char *s, va_list args)
> > - __attribute__ ((format (printf, 1, 0)));
> > -static inline int vprintk(const char *s, va_list args) { return 0; }
> > -static inline int printk(const char *s, ...)
> > - __attribute__ ((format (printf, 1, 2)));
> > -static inline int __cold printk(const char *s, ...) { return 0; }
> > -static inline int log_buf_get_len(void) { return 0; }
> > -static inline int log_buf_read(int idx) { return 0; }
> >
> > -static inline int log_buf_copy(char *dest, int idx, int len) { return 0; }
> > -static inline int printk_ratelimit(void) { return 0; }
> > -static inline int __printk_ratelimit(int ratelimit_jiffies, \
> > - int ratelimit_burst) { return 0; }
> > -static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \
> > - unsigned int interval_msec) \
> > - { return false; }
> > -#endif
> > -
> > -extern void __attribute__((format(printf, 1, 2)))
> > - early_printk(const char *fmt, ...);
> > -
> > unsigned long int_sqrt(unsigned long);
> >
> > -static inline void console_silent(void)
> > -{
> > - console_loglevel = 0;
> > -}
> > -
> > -static inline void console_verbose(void)
> > -{
> > - if (console_loglevel)
> > - console_loglevel = 15;
> > -}
> > -
> > extern void bust_spinlocks(int yes);
> > extern void wake_up_klogd(void);
> > extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */
> > @@ -261,47 +191,6 @@ extern enum system_states {
> > #define TAINT_OVERRIDDEN_ACPI_TABLE (1<<8)
> > #define TAINT_WARN (1<<9)
> >
> > -extern void dump_stack(void) __cold;
> > -
> > -enum {
> > - DUMP_PREFIX_NONE,
> > - DUMP_PREFIX_ADDRESS,
> > - DUMP_PREFIX_OFFSET
> > -};
> > -extern void hex_dump_to_buffer(const void *buf, size_t len,
> > - int rowsize, int groupsize,
> > - char *linebuf, size_t linebuflen, bool ascii);
> > -extern void print_hex_dump(const char *level, const char *prefix_str,
> > - int prefix_type, int rowsize, int groupsize,
> > - const void *buf, size_t len, bool ascii);
> > -extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
> > - const void *buf, size_t len);
> > -#define hex_asc(x) "0123456789abcdef"[x]
> > -
> > -#define pr_emerg(fmt, arg...) \
> > - printk(KERN_EMERG fmt, ##arg)
> > -#define pr_alert(fmt, arg...) \
> > - printk(KERN_ALERT fmt, ##arg)
> > -#define pr_crit(fmt, arg...) \
> > - printk(KERN_CRIT fmt, ##arg)
> > -#define pr_err(fmt, arg...) \
> > - printk(KERN_ERR fmt, ##arg)
> > -#define pr_warning(fmt, arg...) \
> > - printk(KERN_WARNING fmt, ##arg)
> > -#define pr_notice(fmt, arg...) \
> > - printk(KERN_NOTICE fmt, ##arg)
> > -#define pr_info(fmt, arg...) \
> > - printk(KERN_INFO fmt, ##arg)
> > -
> > -#ifdef DEBUG
> > -/* If you are writing a driver, please use dev_dbg instead */
> > -#define pr_debug(fmt, arg...) \
> > - printk(KERN_DEBUG fmt, ##arg)
> > -#else
> > -#define pr_debug(fmt, arg...) \
> > - ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; })
> > -#endif
> > -
> > /*
> > * Display an IP address in readable format.
> > */
> > diff --git a/include/linux/printk.h b/include/linux/printk.h
> > new file mode 100644
> > index 0000000..732ee9c
> > --- /dev/null
> > +++ b/include/linux/printk.h
> > @@ -0,0 +1,137 @@
> > +#ifndef _LINUX_PRINTK_H
> > +#define _LINUX_PRINTK_H
> > +
> > +#define KERN_EMERG "<0>" /* system is unusable */
> > +#define KERN_ALERT "<1>" /* action must be taken immediately */
> > +#define KERN_CRIT "<2>" /* critical conditions */
> > +#define KERN_ERR "<3>" /* error conditions */
> > +#define KERN_WARNING "<4>" /* warning conditions */
> > +#define KERN_NOTICE "<5>" /* normal but significant condition */
> > +#define KERN_INFO "<6>" /* informational */
> > +#define KERN_DEBUG "<7>" /* debug-level messages */
> > +
> > +/*
> > + * Annotation for a "continued" line of log printout (only done after a
> > + * line that had no enclosing \n). Only to be used by core/arch code
> > + * during early bootup (a continued line is not SMP-safe otherwise).
> > + */
> > +#define KERN_CONT ""
> > +
> > +extern int console_printk[];
> > +
> > +#define console_loglevel (console_printk[0])
> > +#define default_message_loglevel (console_printk[1])
> > +#define minimum_console_loglevel (console_printk[2])
> > +#define default_console_loglevel (console_printk[3])
> > +
> > +#ifdef CONFIG_PRINTK
> > +asmlinkage int vprintk(const char *fmt, va_list args)
> > + __attribute__ ((format (printf, 1, 0)));
> > +asmlinkage int printk(const char *fmt, ...)
> > + __attribute__ ((format (printf, 1, 2))) __cold;
> > +extern int log_buf_get_len(void);
> >
> > +extern int log_buf_read(int idx);
> > +extern int log_buf_copy(char *dest, int idx, int len);
> > +
> > +extern int printk_ratelimit_jiffies;
> > +extern int printk_ratelimit_burst;
> > +extern int printk_ratelimit(void);
> >
> > +extern int __ratelimit(int ratelimit_jiffies, int ratelimit_burst);
> > +extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst);
> > +extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
> > + unsigned int interval_msec);
> > +#else
> > +static inline int __attribute__ ((format (printf, 1, 0)))
> > +vprintk(const char *s, va_list args)
> > +{
> > + return 0;
> > +}
> > +static inline int __attribute__ ((format (printf, 1, 2))) __cold
> > +printk(const char *s, ...)
> > +{
> > + return 0;
> > +}
> > +static inline int log_buf_get_len(void)
> > +{
> > + return 0;
> > +}
> > +static inline int log_buf_read(int idx)
> >
> > +{
> > + return 0;
> > +}
> > +static inline int log_buf_copy(char *dest, int idx, int len)
> > +{
> > + return 0;
> > +}
> > +static inline int printk_ratelimit(void)
> > +{
> > + return 0;
> > +}
> > +static inline int __printk_ratelimit(int ratelimit_jiffies,
> > + int ratelimit_burst)
> > +{
> > + return 0;
> > +}
> > +static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies,
> > + unsigned int interval_msec)
> > +{
> > + return false;
> > +}
> > +#endif
> > +
> > +extern void __attribute__((format(printf, 1, 2)))
> > + early_printk(const char *fmt, ...);
> > +
> > +static inline void console_silent(void)
> > +{
> > + console_loglevel = 0;
> > +}
> > +
> > +static inline void console_verbose(void)
> > +{
> > + if (console_loglevel)
> > + console_loglevel = 15;
> > +}
> > +
> > +extern void dump_stack(void) __cold;
> > +
> > +enum {
> > + DUMP_PREFIX_NONE,
> > + DUMP_PREFIX_ADDRESS,
> > + DUMP_PREFIX_OFFSET
> > +};
> > +extern void hex_dump_to_buffer(const void *buf, size_t len,
> > + int rowsize, int groupsize,
> > + char *linebuf, size_t linebuflen, bool ascii);
> > +extern void print_hex_dump(const char *level, const char *prefix_str,
> > + int prefix_type, int rowsize, int groupsize,
> > + const void *buf, size_t len, bool ascii);
> > +extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
> > + const void *buf, size_t len);
> > +#define hex_asc(x) "0123456789abcdef"[x]
> > +
> > +#define pr_emerg(fmt, arg...) \
> > + printk(KERN_EMERG fmt, ##arg)
> > +#define pr_alert(fmt, arg...) \
> > + printk(KERN_ALERT fmt, ##arg)
> > +#define pr_crit(fmt, arg...) \
> > + printk(KERN_CRIT fmt, ##arg)
> > +#define pr_err(fmt, arg...) \
> > + printk(KERN_ERR fmt, ##arg)
> > +#define pr_warning(fmt, arg...) \
> > + printk(KERN_WARNING fmt, ##arg)
> > +#define pr_notice(fmt, arg...) \
> > + printk(KERN_NOTICE fmt, ##arg)
> > +#define pr_info(fmt, arg...) \
> > + printk(KERN_INFO fmt, ##arg)
> > +
> > +#ifdef DEBUG
> > +/* If you are writing a driver, please use dev_dbg instead */
> > +#define pr_debug(fmt, arg...) \
> > + printk(KERN_DEBUG fmt, ##arg)
> > +#else
> > +#define pr_debug(fmt, arg...) \
> > + ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; })
> > +#endif
> > +
> > +#endif
> >
> >
> >
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/