Skip to content

Commit

Permalink
[PATCH] clean up kernel messages
Browse files Browse the repository at this point in the history
Arrange for all kernel printks to be no-ops.  Only available if
CONFIG_EMBEDDED.

This patch saves about 375k on my laptop config and nearly 100k on minimal
configs.

Signed-off-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Matt Mackall authored and Linus Torvalds committed May 1, 2005
1 parent cd7619d commit d59745c
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 6 deletions.
2 changes: 2 additions & 0 deletions arch/i386/kernel/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@ rp_sidt:
ALIGN
ignore_int:
cld
#ifdef CONFIG_PRINTK
pushl %eax
pushl %ecx
pushl %edx
Expand All @@ -400,6 +401,7 @@ ignore_int:
popl %edx
popl %ecx
popl %eax
#endif
iret

/*
Expand Down
9 changes: 9 additions & 0 deletions include/linux/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,19 @@ extern int __kernel_text_address(unsigned long addr);
extern int kernel_text_address(unsigned long addr);
extern int session_of_pgrp(int 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)));
#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 printk(const char *s, ...) { return 0; }
#endif

unsigned long int_sqrt(unsigned long);

Expand Down
11 changes: 11 additions & 0 deletions init/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,17 @@ config KALLSYMS_EXTRA_PASS
reported. KALLSYMS_EXTRA_PASS is only a temporary workaround while
you wait for kallsyms to be fixed.


config PRINTK
default y
bool "Enable support for printk" if EMBEDDED
help
This option enables normal printk support. Removing it
eliminates most of the message strings from the kernel image
and makes the kernel more or less silent. As this makes it
very difficult to diagnose system problems, saying N here is
strongly discouraged.

config BUG
bool "BUG() support" if EMBEDDED
default y
Expand Down
27 changes: 21 additions & 6 deletions kernel/printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,6 @@ static int console_locked;
*/
static DEFINE_SPINLOCK(logbuf_lock);

static char __log_buf[__LOG_BUF_LEN];
static char *log_buf = __log_buf;
static int log_buf_len = __LOG_BUF_LEN;

#define LOG_BUF_MASK (log_buf_len-1)
#define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK])

Expand All @@ -99,7 +95,6 @@ static int log_buf_len = __LOG_BUF_LEN;
static unsigned long log_start; /* Index into log_buf: next char to be read by syslog() */
static unsigned long con_start; /* Index into log_buf: next char to be sent to consoles */
static unsigned long log_end; /* Index into log_buf: most-recently-written-char + 1 */
static unsigned long logged_chars; /* Number of chars produced since last read+clear operation */

/*
* Array of consoles built from command line options (console=)
Expand All @@ -120,6 +115,13 @@ static int preferred_console = -1;
/* Flag: console code may call schedule() */
static int console_may_schedule;

#ifdef CONFIG_PRINTK

static char __log_buf[__LOG_BUF_LEN];
static char *log_buf = __log_buf;
static int log_buf_len = __LOG_BUF_LEN;
static unsigned long logged_chars; /* Number of chars produced since last read+clear operation */

/*
* Setup a list of consoles. Called from init/main.c
*/
Expand Down Expand Up @@ -535,6 +537,7 @@ __setup("time", printk_time_setup);
* then changes console_loglevel may break. This is because console_loglevel
* is inspected when the actual printing occurs.
*/

asmlinkage int printk(const char *fmt, ...)
{
va_list args;
Expand Down Expand Up @@ -655,6 +658,18 @@ asmlinkage int vprintk(const char *fmt, va_list args)
EXPORT_SYMBOL(printk);
EXPORT_SYMBOL(vprintk);

#else

asmlinkage long sys_syslog(int type, char __user * buf, int len)
{
return 0;
}

int do_syslog(int type, char __user * buf, int len) { return 0; }
static void call_console_drivers(unsigned long start, unsigned long end) {}

#endif

/**
* acquire_console_sem - lock the console system for exclusive use.
*
Expand Down Expand Up @@ -931,7 +946,7 @@ int unregister_console(struct console * console)
return res;
}
EXPORT_SYMBOL(unregister_console);

/**
* tty_write_message - write a message to a certain tty, not just the console.
*
Expand Down

0 comments on commit d59745c

Please sign in to comment.