* [RFC PATCH 0/3] printk: Use a non-printable ASCII SOH for KERN_<LEVEL>
@ 2012-05-24 22:49 Joe Perches
2012-05-24 22:49 ` [RFC PATCH 1/3] printk: Use a non-printable ASCII KERN_<LEVEL> initiator Joe Perches
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Joe Perches @ 2012-05-24 22:49 UTC (permalink / raw)
To: Linus Torvalds, linux-kernel; +Cc: Greg KH, Kay Sievers, Andrew Morton
printk uses "<.>" as a start of record indicator.
This can waste a bit of space and causes a bit of
contortion to get a printk emitted that happens to
starts with "<.>".
Use ASCII Start-of-Header (0x01) as the KERN_LEVEL
initiator and save ~10K in an x86 defconfig.
Joe Perches (3):
printk: Use a non-printable ASCII KERN_<LEVEL> initiator
treewide: Fix declaration and uses of old KERN_<LEVEL> style
printk: Set KERN_CONT to ""
arch/arm/lib/io-acorn.S | 4 +++-
arch/arm/vfp/vfphw.S | 8 +++++---
arch/frv/kernel/kernel_thread.S | 2 +-
drivers/staging/wlags49_h2/hcf.c | 8 ++++----
drivers/staging/wlags49_h2/wl_main.c | 4 ++--
fs/btrfs/super.c | 9 +++++----
include/linux/printk.h | 23 +++++++++++++----------
kernel/printk.c | 6 +++---
net/bridge/netfilter/ebt_log.c | 2 +-
sound/core/misc.c | 8 ++++----
10 files changed, 41 insertions(+), 33 deletions(-)
--
1.7.8.111.gad25c.dirty
^ permalink raw reply [flat|nested] 4+ messages in thread
* [RFC PATCH 1/3] printk: Use a non-printable ASCII KERN_<LEVEL> initiator
2012-05-24 22:49 [RFC PATCH 0/3] printk: Use a non-printable ASCII SOH for KERN_<LEVEL> Joe Perches
@ 2012-05-24 22:49 ` Joe Perches
2012-05-24 22:49 ` [RFC PATCH 2/3] treewide: Fix declaration and uses of old KERN_<LEVEL> style Joe Perches
2012-05-24 22:49 ` [RFC PATCH 3/3] printk: Set KERN_CONT to "" Joe Perches
2 siblings, 0 replies; 4+ messages in thread
From: Joe Perches @ 2012-05-24 22:49 UTC (permalink / raw)
To: Linus Torvalds, linux-kernel; +Cc: Greg KH, Kay Sievers, Andrew Morton
printk uses <.> to denote the message level.
There are thousands of messages in default kernel.
Use ASCII SOH (hex: 01) with no terminator
to save 1 byte per message.
This also means that KERN_CONT could be completely
removed (#defined to "") as it is no longer serves
any real purpose.
Signed-off-by: Joe Perches <joe@perches.com>
---
include/linux/printk.h | 23 +++++++++++++----------
kernel/printk.c | 6 +++---
2 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/include/linux/printk.h b/include/linux/printk.h
index 1bec2f7..ad76855 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -6,23 +6,26 @@
extern const char linux_banner[];
extern const char linux_proc_banner[];
-#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 */
+#define KERN_SOH "\001" /* ASCII Start Of Header */
+#define KERN_SOH_ASCII '\001'
+
+#define KERN_EMERG KERN_SOH "0" /* system is unusable */
+#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
+#define KERN_CRIT KERN_SOH "2" /* critical conditions */
+#define KERN_ERR KERN_SOH "3" /* error conditions */
+#define KERN_WARNING KERN_SOH "4" /* warning conditions */
+#define KERN_NOTICE KERN_SOH "5" /* normal but significant condition */
+#define KERN_INFO KERN_SOH "6" /* informational */
+#define KERN_DEBUG KERN_SOH "7" /* debug-level messages */
/* Use the default kernel loglevel */
-#define KERN_DEFAULT "<d>"
+#define KERN_DEFAULT KERN_SOH "d"
/*
* 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 "<c>"
+#define KERN_CONT KERN_SOH "c"
extern int console_printk[];
diff --git a/kernel/printk.c b/kernel/printk.c
index 32462d2..e96e733 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1329,7 +1329,7 @@ asmlinkage int vprintk_emit(int facility, int level,
}
/* strip syslog prefix and extract log level or control flags */
- if (text[0] == '<' && text[1] && text[2] == '>') {
+ if (text[0] == KERN_SOH_ASCII && text[1]) {
switch (text[1]) {
case '0' ... '7':
if (level == -1)
@@ -1337,8 +1337,8 @@ asmlinkage int vprintk_emit(int facility, int level,
case 'd': /* KERN_DEFAULT */
prefix = true;
case 'c': /* KERN_CONT */
- text += 3;
- text_len -= 3;
+ text += 2;
+ text_len -= 2;
}
}
--
1.7.8.111.gad25c.dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC PATCH 2/3] treewide: Fix declaration and uses of old KERN_<LEVEL> style
2012-05-24 22:49 [RFC PATCH 0/3] printk: Use a non-printable ASCII SOH for KERN_<LEVEL> Joe Perches
2012-05-24 22:49 ` [RFC PATCH 1/3] printk: Use a non-printable ASCII KERN_<LEVEL> initiator Joe Perches
@ 2012-05-24 22:49 ` Joe Perches
2012-05-24 22:49 ` [RFC PATCH 3/3] printk: Set KERN_CONT to "" Joe Perches
2 siblings, 0 replies; 4+ messages in thread
From: Joe Perches @ 2012-05-24 22:49 UTC (permalink / raw)
To: Linus Torvalds, linux-kernel; +Cc: Greg KH, Kay Sievers, Andrew Morton
Now that KERN_<LEVEL> is no longer "<.>",
some code that relied on that form needed to
be updated.
Replace direct declarations of <.> and fix
the parsing of <.> to use the new KERN_SOH
style.
Signed-off-by: Joe Perches <joe@perches.com>
---
arch/arm/lib/io-acorn.S | 4 +++-
arch/arm/vfp/vfphw.S | 8 +++++---
arch/frv/kernel/kernel_thread.S | 2 +-
drivers/staging/wlags49_h2/hcf.c | 8 ++++----
drivers/staging/wlags49_h2/wl_main.c | 4 ++--
fs/btrfs/super.c | 9 +++++----
net/bridge/netfilter/ebt_log.c | 2 +-
sound/core/misc.c | 8 ++++----
8 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/arch/arm/lib/io-acorn.S b/arch/arm/lib/io-acorn.S
index 1b197ea..6b5b6ee 100644
--- a/arch/arm/lib/io-acorn.S
+++ b/arch/arm/lib/io-acorn.S
@@ -13,11 +13,13 @@
#include <linux/linkage.h>
#include <asm/assembler.h>
+#define KERN_WARNING "\001" "4"
+
.text
.align
.Liosl_warning:
- .ascii "<4>insl/outsl not implemented, called from %08lX\0"
+ .ascii KERN_WARNING "insl/outsl not implemented, called from %08lX\0"
.align
/*
diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
index 2d30c7f..640f25e 100644
--- a/arch/arm/vfp/vfphw.S
+++ b/arch/arm/vfp/vfphw.S
@@ -18,13 +18,15 @@
#include <asm/vfpmacros.h>
#include "../kernel/entry-header.S"
+#define KERN_DEBUG "\001" "7"
+
.macro DBGSTR, str
#ifdef DEBUG
stmfd sp!, {r0-r3, ip, lr}
add r0, pc, #4
bl printk
b 1f
- .asciz "<7>VFP: \str\n"
+ .asciz KERN_DEBUG "VFP: \str\n"
.balign 4
1: ldmfd sp!, {r0-r3, ip, lr}
#endif
@@ -37,7 +39,7 @@
add r0, pc, #4
bl printk
b 1f
- .asciz "<7>VFP: \str\n"
+ .asciz KERN_DEBUG "VFP: \str\n"
.balign 4
1: ldmfd sp!, {r0-r3, ip, lr}
#endif
@@ -52,7 +54,7 @@
add r0, pc, #4
bl printk
b 1f
- .asciz "<7>VFP: \str\n"
+ .asciz KERN_DEBUG "VFP: \str\n"
.balign 4
1: ldmfd sp!, {r0-r3, ip, lr}
#endif
diff --git a/arch/frv/kernel/kernel_thread.S b/arch/frv/kernel/kernel_thread.S
index 4531c83..a3b69e9 100644
--- a/arch/frv/kernel/kernel_thread.S
+++ b/arch/frv/kernel/kernel_thread.S
@@ -13,7 +13,7 @@
#include <asm/unistd.h>
#define CLONE_VM 0x00000100 /* set if VM shared between processes */
-#define KERN_ERR "<3>"
+#define KERN_ERR "\001" "3"
.section .rodata
kernel_thread_emsg:
diff --git a/drivers/staging/wlags49_h2/hcf.c b/drivers/staging/wlags49_h2/hcf.c
index 366e4a4..4235446 100644
--- a/drivers/staging/wlags49_h2/hcf.c
+++ b/drivers/staging/wlags49_h2/hcf.c
@@ -705,7 +705,7 @@ hcf_action( IFBP ifbp, hcf_16 action )
// 800 us latency before FW switches to high power
MSF_WAIT(800); // MSF-defined function to wait n microseconds.
//OOR if ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_DS_OOR ) { // OutOfRange
-// printk( "<5>ACT_INT_OFF: Deepsleep phase terminated, enable and go to AwaitConnection\n" ); //;?remove me 1 day
+// printk(KERN_NOTICE "ACT_INT_OFF: Deepsleep phase terminated, enable and go to AwaitConnection\n" ); //;?remove me 1 day
// hcf_cntl( ifbp, HCF_CNTL_ENABLE );
// }
// ifbp->IFB_DSLinkStat &= ~( CFG_LINK_STAT_DS_IR | CFG_LINK_STAT_DS_OOR); //clear IR/OOR state
@@ -2979,7 +2979,7 @@ hcf_service_nic( IFBP ifbp, wci_bufp bufp, unsigned int len )
ltv.typ = CFG_DDS_TICK_TIME;
ltv.tick_time = ( ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_TIMER ) + 0x10 ) *64; //78 is more right
hcf_put_info( ifbp, (LTVP)<v );
- printk( "<5>Preparing for sleep, link_status: %04X, timer : %d\n",
+ printk(KERN_NOTICE "Preparing for sleep, link_status: %04X, timer : %d\n",
ifbp->IFB_DSLinkStat, ltv.tick_time );//;?remove me 1 day
ifbp->IFB_TickCnt++; //;?just to make sure we do not keep on printing above message
if ( ltv.tick_time < 300 * 125 ) ifbp->IFB_DSLinkStat += 0x0010;
@@ -4221,11 +4221,11 @@ isr_info( IFBP ifbp )
// /*4*/ if ( info[1] == CFG_LINK_STAT ) {
// ifbp->IFB_DSLinkStat = IPW( HREG_DATA_1 ) | CFG_LINK_STAT_CHANGE; //corrupts BAP !! ;?
// ifbp->IFB_LinkStat = ifbp->IFB_DSLinkStat & CFG_LINK_STAT_FW; //;? to be obsoleted
-// printk( "<4>linkstatus: %04x\n", ifbp->IFB_DSLinkStat ); //;?remove me 1 day
+// printk(KERN_ERR "linkstatus: %04x\n", ifbp->IFB_DSLinkStat ); //;?remove me 1 day
// #if (HCF_SLEEP) & HCF_DDS
// if ( ( ifbp->IFB_DSLinkStat & CFG_LINK_STAT_CONNECTED ) == 0 ) { //even values are disconnected etc.
// ifbp->IFB_TickCnt = 0; //start 2 second period (with 1 tick uncertanty)
-// printk( "<5>isr_info: AwaitConnection phase started, IFB_TickCnt = 0\n" ); //;?remove me 1 day
+// printk(KERN_NOTICE "isr_info: AwaitConnection phase started, IFB_TickCnt = 0\n" ); //;?remove me 1 day
// }
// #endif // HCF_DDS
// }
diff --git a/drivers/staging/wlags49_h2/wl_main.c b/drivers/staging/wlags49_h2/wl_main.c
index d5bf0a7..2041078 100644
--- a/drivers/staging/wlags49_h2/wl_main.c
+++ b/drivers/staging/wlags49_h2/wl_main.c
@@ -3822,7 +3822,7 @@ static int write_int(struct file *file, const char *buffer, unsigned long count,
lp->timer_oor.data = (unsigned long)lp;
lp->timer_oor.expires = RUN_AT( 3 * HZ );
add_timer( &lp->timer_oor );
- printk( "<5>wl_enable: %ld\n", jiffies ); //;?remove me 1 day
+ printk(KERN_NOTICE "wl_enable: %ld\n", jiffies ); //;?remove me 1 day
#endif //DN554
#ifdef DN554
/*******************************************************************************
@@ -3852,7 +3852,7 @@ void timer_oor( u_long arg )
DBG_ENTER( DbgInfo );
DBG_PARAM( DbgInfo, "arg", "0x%08lx", arg );
- printk( "<5>timer_oor: %ld 0x%04X\n", jiffies, lp->timer_oor_cnt ); //;?remove me 1 day
+ printk(KERN_NOTICE "timer_oor: %ld 0x%04X\n", jiffies, lp->timer_oor_cnt ); //;?remove me 1 day
lp->timer_oor_cnt += 10;
if ( (lp->timer_oor_cnt & ~DS_OOR) > 300 ) {
lp->timer_oor_cnt = 300;
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index c5f8fca..daf2e47 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -180,16 +180,17 @@ const char *logtypes[] = {
void btrfs_printk(struct btrfs_fs_info *fs_info, const char *fmt, ...)
{
struct super_block *sb = fs_info->sb;
- char lvl[4];
+ char lvl[3];
struct va_format vaf;
va_list args;
const char *type = logtypes[4];
va_start(args, fmt);
- if (fmt[0] == '<' && isdigit(fmt[1]) && fmt[2] == '>') {
- strncpy(lvl, fmt, 3);
- fmt += 3;
+ if (fmt[0] == KERN_SOH_ASCII && isdigit(fmt[1])) {
+ lvl[0] = fmt[0];
+ lvl[1] = fmt[1];
+ lvl[2] = 0;
type = logtypes[fmt[1] - '0'];
} else
*lvl = '\0';
diff --git a/net/bridge/netfilter/ebt_log.c b/net/bridge/netfilter/ebt_log.c
index f88ee53..31286d3 100644
--- a/net/bridge/netfilter/ebt_log.c
+++ b/net/bridge/netfilter/ebt_log.c
@@ -80,7 +80,7 @@ ebt_log_packet(u_int8_t pf, unsigned int hooknum,
unsigned int bitmask;
spin_lock_bh(&ebt_log_lock);
- printk("<%c>%s IN=%s OUT=%s MAC source = %pM MAC dest = %pM proto = 0x%04x",
+ printk(KERN_SOH "%c" "%s IN=%s OUT=%s MAC source = %pM MAC dest = %pM proto = 0x%04x",
'0' + loginfo->u.log.level, prefix,
in ? in->name : "", out ? out->name : "",
eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest,
diff --git a/sound/core/misc.c b/sound/core/misc.c
index 7681679..4e47cd8 100644
--- a/sound/core/misc.c
+++ b/sound/core/misc.c
@@ -81,11 +81,11 @@ void __snd_printk(unsigned int level, const char *path, int line,
#ifdef CONFIG_SND_VERBOSE_PRINTK
vaf.fmt = format;
vaf.va = &args;
- if (format[0] == '<' && format[2] == '>') {
- memcpy(verbose_fmt, format, 3);
- vaf.fmt = format + 3;
+ if (format[0] == KERN_SOH_ASCII) {
+ memcpy(verbose_fmt, format, 2);
+ vaf.fmt = format + 2;
} else if (level)
- memcpy(verbose_fmt, KERN_DEBUG, 3);
+ memcpy(verbose_fmt, KERN_DEBUG, 2);
printk(verbose_fmt, sanity_file_name(path), line, &vaf);
#else
vprintk(format, args);
--
1.7.8.111.gad25c.dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC PATCH 3/3] printk: Set KERN_CONT to ""
2012-05-24 22:49 [RFC PATCH 0/3] printk: Use a non-printable ASCII SOH for KERN_<LEVEL> Joe Perches
2012-05-24 22:49 ` [RFC PATCH 1/3] printk: Use a non-printable ASCII KERN_<LEVEL> initiator Joe Perches
2012-05-24 22:49 ` [RFC PATCH 2/3] treewide: Fix declaration and uses of old KERN_<LEVEL> style Joe Perches
@ 2012-05-24 22:49 ` Joe Perches
2 siblings, 0 replies; 4+ messages in thread
From: Joe Perches @ 2012-05-24 22:49 UTC (permalink / raw)
To: Linus Torvalds, linux-kernel; +Cc: Greg KH, Kay Sievers, Andrew Morton
Logging content is only printable ASCII.
Now that all KERN_<LEVEL> uses are specified by ASCII SOH,
KERN_CONT doesn't have any real purpose.
Signed-off-by: Joe Perches <joe@perches.com>
---
include/linux/printk.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/linux/printk.h b/include/linux/printk.h
index ad76855..482121b 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -25,7 +25,7 @@ extern const char linux_proc_banner[];
* 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 KERN_SOH "c"
+#define KERN_CONT ""
extern int console_printk[];
--
1.7.8.111.gad25c.dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-05-24 22:50 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-24 22:49 [RFC PATCH 0/3] printk: Use a non-printable ASCII SOH for KERN_<LEVEL> Joe Perches
2012-05-24 22:49 ` [RFC PATCH 1/3] printk: Use a non-printable ASCII KERN_<LEVEL> initiator Joe Perches
2012-05-24 22:49 ` [RFC PATCH 2/3] treewide: Fix declaration and uses of old KERN_<LEVEL> style Joe Perches
2012-05-24 22:49 ` [RFC PATCH 3/3] printk: Set KERN_CONT to "" Joe Perches
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox