Skip to contentSkip to conversation

patch for 2.4.0 disable printk and panic messages, third try

PATCH Stefani Seibold 3 participants 3 messages Jan 28, 2001

Subsystems (9)
Documentation Arm (32-bit) MIPS s390 +5 more subsystems
lore
Share & tools
lore
#0 lore raw

Hi guys,

this is now the third try to release my patch for disabling all kernel messages. It is usefull on deep embedded systems with no human interactions and for rescue discs where the diskspace is always to less.

This patch has now the following features:

The macro printk throws away all parameters and calls now a funciton "inline int printk_inline(void)" which always return 0 integer. So it should be now compatibel to the original printk funciton.

The macro panic also throws away all parameter and calls a function "NORET_TYPE void panic_nomsg(void) ATTRIB_NORET", which is still the same as the old panic function, but without display an oops and reboot immidiately.

All parameters of printk and panic will be automatically removed by the compiler optimizions.

The old functions printk and panic will be also implemented and exported as silent functions for backward compatibility.

The name of the config variable is now CONFIG_NOPRINTK.

The option for disabling the printk and panic messages in in menu kernel hacking.

It is a normal behaviour, that you get now some compiler warnings like "variable not used", because some of the them are only used for output by printk or panic, which will be now removed by optimizing.

Greetings,
Stefani

-----patch for 2.4.0 disable printk and panic -----

CREDITS +8 -0
diff -u --recursive --new-file linux/CREDITS linux.noprintk/CREDITS
@@ -2395,6 +2395,14 @@
 S: Oldenburg
 S: Germany
 
+N: Stefani Seibold
+E: [email protected]
+D: Possibility to disable all kernel messages by overload printk with a
+D: dummy macro (saves a lot of disk- and ramspace for embedded systems
+D: and rescue disks)
+S: Munich
+S: Germany
+
 N: Darren Senn
 E: [email protected]
 D: Whatever I notice needs doing (so far: itimers, /proc)

diff -u --recursive --new-file linux/Documentation/Configure.help linux.noprintk/Documentation/Configure.help

Documentation/Configure.help +8 -0
@@ -12139,6 +12179,14 @@
 
   If unsure, say Y, or else you won't be able to do much with your new
   shiny Linux system :-)
+
+Disable kernel messages
+CONFIG_NOPRINTK
+  This option allows you to disable all kernel messages by overriding
+  the printk function with an empty macro.
+  On small embedded systems, this save a lot of rom and ram space. On
+  server or desktop systems you want human readable outputs, so it is
+  normally the best choice to say N to this option.
 
 Support for console on virtual terminal
 CONFIG_VT_CONSOLE

diff -u --recursive --new-file linux/arch/alpha/config.in linux.noprintk/arch/alpha/config.in

arch/alpha/config.in +1 -0
@@ -359,6 +359,7 @@
 fi
 
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 
 bool 'Legacy kernel start address' CONFIG_ALPHA_LEGACY_START_ADDRESS
 

diff -u --recursive --new-file linux/arch/arm/config.in linux.noprintk/arch/arm/config.in

arch/arm/config.in +1 -0
@@ -414,6 +414,7 @@
 bool 'Verbose user fault messages' CONFIG_DEBUG_USER
 bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 if [ "$CONFIG_CPU_26" = "y" ]; then
    bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE
 fi

diff -u --recursive --new-file linux/arch/i386/config.in linux.noprintk/arch/i386/config.in

arch/i386/config.in +1 -0
@@ -374,4 +374,5 @@
 
 #bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu

diff -u --recursive --new-file linux/arch/ia64/config.in linux.noprintk/arch/ia64/config.in

arch/ia64/config.in +1 -0
@@ -249,6 +249,7 @@
 fi
 
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 bool 'Early printk support (requires VGA!)' CONFIG_IA64_EARLY_PRINTK
 bool 'Turn on compare-and-exchange bug checking (slow!)' 

CONFIG_IA64_DEBUG_CMPXCHG
bool 'Turn on irq debug checks (slow!)' CONFIG_IA64_DEBUG_IRQ
diff -u --recursive --new-file linux/arch/m68k/config.in linux.noprintk/arch/m68k/config.in

arch/m68k/config.in +1 -0
@@ -538,4 +538,5 @@
 
 #bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu

diff -u --recursive --new-file linux/arch/mips/config.in linux.noprintk/arch/mips/config.in

arch/mips/config.in +1 -0
@@ -397,4 +397,5 @@
   bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG
 fi
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu

diff -u --recursive --new-file linux/arch/mips64/config.in linux.noprintk/arch/mips64/config.in

arch/mips64/config.in +1 -0
@@ -266,4 +266,5 @@
 fi
 bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu

diff -u --recursive --new-file linux/arch/parisc/config.in linux.noprintk/arch/parisc/config.in

arch/parisc/config.in +1 -0
@@ -204,5 +204,6 @@
 
 #bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu
 

diff -u --recursive --new-file linux/arch/ppc/config.in linux.noprintk/arch/ppc/config.in

arch/ppc/config.in +1 -0
@@ -324,6 +324,7 @@
 comment 'Kernel hacking'
 
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 bool 'Include kgdb kernel debugger' CONFIG_KGDB
 bool 'Include xmon kernel debugger' CONFIG_XMON
 endmenu

diff -u --recursive --new-file linux/arch/s390/config.in linux.noprintk/arch/s390/config.in

arch/s390/config.in +1 -0
@@ -77,5 +77,6 @@
   bool 'Remote GDB kernel debugging' CONFIG_REMOTE_DEBUG
 fi
 # this does not work. bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu
 

diff -u --recursive --new-file linux/arch/sh/config.in linux.noprintk/arch/sh/config.in

arch/sh/config.in +1 -0
@@ -260,6 +260,7 @@
 comment 'Kernel hacking'
 
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 bool 'Use LinuxSH standard BIOS' CONFIG_SH_STANDARD_BIOS
 if [ "$CONFIG_SH_STANDARD_BIOS" = "y" ]; then
    bool 'GDB Stub kernel debug' CONFIG_DEBUG_KERNEL_WITH_GDB_STUB

diff -u --recursive --new-file linux/arch/sparc/config.in linux.noprintk/arch/sparc/config.in

arch/sparc/config.in +1 -0
@@ -258,4 +258,5 @@
 comment 'Kernel hacking'
 
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 endmenu

diff -u --recursive --new-file linux/arch/sparc64/config.in linux.noprintk/arch/sparc64/config.in

arch/sparc64/config.in +1 -0
@@ -331,5 +331,6 @@
 comment 'Kernel hacking'
 
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+bool 'Disable kernel messages' CONFIG_NOPRINTK
 #bool 'ECache flush trap support at ta 0x72' CONFIG_EC_FLUSH_TRAP
 endmenu

diff -u --recursive --new-file linux/include/asm-i386/spinlock.h linux.noprintk/include/asm-i386/spinlock.h

include/asm-i386/spinlock.h +2 -0
@@ -5,8 +5,10 @@
 #include <asm/rwlock.h>
 #include <asm/page.h>
 
+#ifndef CONFIG_NOPRINTK
 extern int printk(const char * fmt, ...)
 	__attribute__ ((format (printf, 1, 2)));
+#endif
 
 /* It seems that people are forgetting to
  * initialize their spinlocks properly, tsk tsk.

diff -u --recursive --new-file linux/include/linux/kernel.h linux.noprintk/include/linux/kernel.h

include/linux/kernel.h +17 -0
@@ -48,8 +48,15 @@
 struct semaphore;
 
 extern struct notifier_block *panic_notifier_list;
+#ifdef CONFIG_NOPRINTK
+
+#define	panic(x...)	panic_nomsg()
+
+NORET_TYPE void panic_nomsg(void) ATTRIB_NORET;
+#else
 NORET_TYPE void panic(const char * fmt, ...)
 	__attribute__ ((NORET_AND format (printf, 1, 2)));
+#endif
 NORET_TYPE void do_exit(long error_code)
 	ATTRIB_NORET;
 NORET_TYPE void up_and_exit(struct semaphore *, long)
@@ -68,8 +75,18 @@
 
 extern int session_of_pgrp(int pgrp);
 
+#ifdef CONFIG_NOPRINTK
+#define	printk(x...)	printk_inline()
+
+static inline int printk_inline(void) __attribute__ ((const,unused));
+
+static inline int printk_inline(void)	{ return 0; }
+#else
+
 asmlinkage int printk(const char * fmt, ...)
 	__attribute__ ((format (printf, 1, 2)));
+#endif
+
 
 extern int console_loglevel;
 

diff -u --recursive --new-file linux/kernel/ksyms.c linux.noprintk/kernel/ksyms.c

kernel/ksyms.c +2 -0
@@ -438,8 +439,10 @@
 EXPORT_SYMBOL(nr_running);
 
 /* misc */
+#ifndef CONFIG_NOPRINTK
 EXPORT_SYMBOL(panic);
 EXPORT_SYMBOL(printk);
+#endif
 EXPORT_SYMBOL(sprintf);
 EXPORT_SYMBOL(vsprintf);
 EXPORT_SYMBOL(kdevname);

diff -u --recursive --new-file linux/kernel/panic.c linux.noprintk/kernel/panic.c

kernel/panic.c +28 -2
@@ -43,18 +43,25 @@
  *	This function never returns.
  */
  
+#ifdef CONFIG_NOPRINTK
+NORET_TYPE void panic_nomsg(void)
+#else
 NORET_TYPE void panic(const char * fmt, ...)
+#endif
 {
-	static char buf[1024];
-	va_list args;
 #if defined(CONFIG_ARCH_S390)
         unsigned long caller = (unsigned long) __builtin_return_address(0);
 #endif
 
+#ifndef CONFIG_NOPRINTK
+	static char buf[1024];
+	va_list args;
+
 	va_start(args, fmt);
 	vsprintf(buf, fmt, args);
 	va_end(args);
 	printk(KERN_EMERG "Kernel panic: %s\n",buf);
+#endif
 	if (in_interrupt())
 		printk(KERN_EMERG "In interrupt handler - not syncing\n");
 	else if (!current->pid)
@@ -70,6 +77,9 @@
 
 	notifier_call_chain(&panic_notifier_list, 0, NULL);
 
+#ifdef CONFIG_NOPRINTK
+	machine_restart(NULL);
+#else
 	if (panic_timeout > 0)
 	{
 		/*
@@ -93,6 +103,7 @@
 		printk("Press L1-A to return to the boot prom\n");
 	}
 #endif
+#endif
 #if defined(CONFIG_ARCH_S390)
         disabled_wait(caller);
 #endif
@@ -101,3 +112,18 @@
 		CHECK_EMERGENCY_SYNC
 	}
 }
+
+#ifdef CONFIG_NOPRINTK
+#undef panic
+
+#include <linux/module.h>
+
+NORET_TYPE void panic(const char * fmt, ...)
+{
+	panic_nomsg();
+}
+
+EXPORT_SYMBOL_NOVERS(panic);
+
+#endif
+

diff -u --recursive --new-file linux/kernel/printk.c linux.noprintk/kernel/printk.c

kernel/printk.c +17 -0
@@ -25,7 +25,9 @@
 #define LOG_BUF_LEN	(16384)
 #define LOG_BUF_MASK	(LOG_BUF_LEN-1)
 
+#ifndef CONFIG_NOPRINTK
 static char buf[1024];
+#endif
 
 /* printk's without a loglevel use this.. */
 #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
@@ -251,6 +253,20 @@
 	return do_syslog(type, buf, len);
 }
 
+
+#ifdef CONFIG_NOPRINTK
+#undef printk
+
+#include <linux/module.h>
+
+asmlinkage int printk(const char *fmt, ...)
+{
+	return 0;
+}
+
+EXPORT_SYMBOL_NOVERS(printk);
+
+#else
 asmlinkage int printk(const char *fmt, ...)
 {
 	va_list args;
@@ -311,6 +327,7 @@
 	wake_up_interruptible(&log_wait);
 	return i;
 }
+#endif
 
 void console_print(const char *s)
 {

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#1 lore raw
Quoted 7 lines · Stefani Seibold

Hi guys,

this is now the third try to release my patch for disabling all kernel messages. It is usefull on deep embedded systems with no human interactions and for rescue discs where the diskspace is always to less.

Quoted 6 lines

This patch has now the following features:

The macro printk throws away all parameters and calls now a funciton "inline int printk_inline(void)" which always return 0 integer. So it should be now compatibel to the original printk funciton.

Then I suppose that you've checked that never in kernel printk arguments have side effects, don't you ;-)

printk("%d", p());
printk("%d", a++);
etc.

You're changing semantics of a well known function and also if you don't broke anything now, what grants this for the future?

You need also a big warning in printk documentation: "Note that arguments may to be not evaluated" and hope everybody note it.

I'd prefer to rely on modern compiler smartness.

Signature · 14 lines
Abramo Bagnara                       mailto:[email protected]

Opera Unica                          Phone: +39.546.656023
Via Emilia Interna, 140
48014 Castel Bolognese (RA) - Italy

ALSA project is            http://www.alsa-project.org
sponsored by SuSE Linux    http://www.suse.com

It sounds good!
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
#2 lore raw
In reply to Stefani Seibold

arch/s390/config.in

Quoted 7 lines · Stefani Seibold

this is now the third try to release my patch for disabling all kernel messages. It is usefull on deep embedded systems with no human interactions

arch/s390/config.in +1 -0
 
+bool 'Disable kernel messages' CONFIG_NOPRINTK

S/390 on embedded systems? :)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/