All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one
@ 2010-06-26 19:10 Anton Blanchard
  2010-06-26 19:13 ` [PATCH 2/2] Add oops end marker to lib/bug.c WARN implementation Anton Blanchard
  2010-06-26 19:54 ` [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one Kirill A. Shutemov
  0 siblings, 2 replies; 3+ messages in thread
From: Anton Blanchard @ 2010-06-26 19:10 UTC (permalink / raw)
  To: akpm, mingo, arjan; +Cc: linux-kernel


There are a few issues with the exception based WARN implementation in
lib/bug.c:

- Inconsistent printk flags. The "cut here" line is printed at KERN_EMERG, so
  the console and all logged in users see the single line:

------------[ cut here ]------------

  for each WARN. Fix this so we print everything at KERN_WARNING to match the
  kernel/panic.c version.

- The lib/bug.c WARN would print "Badness at". Change it to match the
  kernel/panic.c version which prints "WARNING: at". 

- Print the list of modules, similar to kernel/panic.c of modules, similar to
  kernel/panic.c

Signed-off-by: Anton Blanchard <anton@samba.org>
---

Index: linux-2.6/lib/bug.c
===================================================================
--- linux-2.6.orig/lib/bug.c	2010-06-26 06:09:59.000000000 +1000
+++ linux-2.6/lib/bug.c	2010-06-26 06:24:28.000000000 +1000
@@ -136,8 +136,6 @@ enum bug_trap_type report_bug(unsigned l
 
 	bug = find_bug(bugaddr);
 
-	printk(KERN_EMERG "------------[ cut here ]------------\n");
-
 	file = NULL;
 	line = 0;
 	warning = 0;
@@ -156,19 +154,24 @@ enum bug_trap_type report_bug(unsigned l
 
 	if (warning) {
 		/* this is a WARN_ON rather than BUG/BUG_ON */
+		printk(KERN_WARNING "------------[ cut here ]------------\n");
+
 		if (file)
-			printk(KERN_ERR "Badness at %s:%u\n",
+			printk(KERN_WARNING "WARNING: at %s:%u\n",
 			       file, line);
 		else
-			printk(KERN_ERR "Badness at %p "
+			printk(KERN_WARNING "WARNING: at %p "
 			       "[verbose debug info unavailable]\n",
 			       (void *)bugaddr);
 
+        	print_modules();
 		show_regs(regs);
 		add_taint(BUG_GET_TAINT(bug));
 		return BUG_TRAP_TYPE_WARN;
 	}
 
+	printk(KERN_EMERG "------------[ cut here ]------------\n");
+
 	if (file)
 		printk(KERN_CRIT "kernel BUG at %s:%u!\n",
 		       file, line);

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 2/2] Add oops end marker to lib/bug.c WARN implementation
  2010-06-26 19:10 [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one Anton Blanchard
@ 2010-06-26 19:13 ` Anton Blanchard
  2010-06-26 19:54 ` [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one Kirill A. Shutemov
  1 sibling, 0 replies; 3+ messages in thread
From: Anton Blanchard @ 2010-06-26 19:13 UTC (permalink / raw)
  To: akpm, mingo, arjan; +Cc: linux-kernel


We are missing the oops end marker for the exception based WARN implementation
in lib/bug.c. This is useful for logfile analysis tools.

Signed-off-by: Anton Blanchard <anton@samba.org>
---

Index: linux-2.6/include/linux/kernel.h
===================================================================
--- linux-2.6.orig/include/linux/kernel.h	2010-06-26 06:29:35.000000000 +1000
+++ linux-2.6/include/linux/kernel.h	2010-06-26 06:30:27.000000000 +1000
@@ -177,6 +177,7 @@ NORET_TYPE void panic(const char * fmt, 
 	__attribute__ ((NORET_AND format (printf, 1, 2))) __cold;
 extern void oops_enter(void);
 extern void oops_exit(void);
+void print_oops_end_marker(void);
 extern int oops_may_print(void);
 NORET_TYPE void do_exit(long error_code)
 	ATTRIB_NORET;
Index: linux-2.6/kernel/panic.c
===================================================================
--- linux-2.6.orig/kernel/panic.c	2010-06-26 06:29:35.000000000 +1000
+++ linux-2.6/kernel/panic.c	2010-06-26 06:30:05.000000000 +1000
@@ -344,7 +344,7 @@ static int init_oops_id(void)
 }
 late_initcall(init_oops_id);
 
-static void print_oops_end_marker(void)
+void print_oops_end_marker(void)
 {
 	init_oops_id();
 	printk(KERN_WARNING "---[ end trace %016llx ]---\n",
Index: linux-2.6/lib/bug.c
===================================================================
--- linux-2.6.orig/lib/bug.c	2010-06-26 06:29:35.000000000 +1000
+++ linux-2.6/lib/bug.c	2010-06-26 06:31:28.000000000 +1000
@@ -166,6 +166,7 @@ enum bug_trap_type report_bug(unsigned l
 
         	print_modules();
 		show_regs(regs);
+		print_oops_end_marker();
 		add_taint(BUG_GET_TAINT(bug));
 		return BUG_TRAP_TYPE_WARN;
 	}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one
  2010-06-26 19:10 [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one Anton Blanchard
  2010-06-26 19:13 ` [PATCH 2/2] Add oops end marker to lib/bug.c WARN implementation Anton Blanchard
@ 2010-06-26 19:54 ` Kirill A. Shutemov
  1 sibling, 0 replies; 3+ messages in thread
From: Kirill A. Shutemov @ 2010-06-26 19:54 UTC (permalink / raw)
  To: Anton Blanchard; +Cc: akpm, mingo, arjan, linux-kernel

On Sun, Jun 27, 2010 at 05:10:59AM +1000, Anton Blanchard wrote:
> 
> There are a few issues with the exception based WARN implementation in
> lib/bug.c:
> 
> - Inconsistent printk flags. The "cut here" line is printed at KERN_EMERG, so
>   the console and all logged in users see the single line:
> 
> ------------[ cut here ]------------
> 
>   for each WARN. Fix this so we print everything at KERN_WARNING to match the
>   kernel/panic.c version.
> 
> - The lib/bug.c WARN would print "Badness at". Change it to match the
>   kernel/panic.c version which prints "WARNING: at". 
> 
> - Print the list of modules, similar to kernel/panic.c of modules, similar to
>   kernel/panic.c
> 
> Signed-off-by: Anton Blanchard <anton@samba.org>
> ---
> 
> Index: linux-2.6/lib/bug.c
> ===================================================================
> --- linux-2.6.orig/lib/bug.c	2010-06-26 06:09:59.000000000 +1000
> +++ linux-2.6/lib/bug.c	2010-06-26 06:24:28.000000000 +1000
> @@ -136,8 +136,6 @@ enum bug_trap_type report_bug(unsigned l
>  
>  	bug = find_bug(bugaddr);
>  
> -	printk(KERN_EMERG "------------[ cut here ]------------\n");
> -
>  	file = NULL;
>  	line = 0;
>  	warning = 0;
> @@ -156,19 +154,24 @@ enum bug_trap_type report_bug(unsigned l
>  
>  	if (warning) {
>  		/* this is a WARN_ON rather than BUG/BUG_ON */
> +		printk(KERN_WARNING "------------[ cut here ]------------\n");
> +
>  		if (file)
> -			printk(KERN_ERR "Badness at %s:%u\n",
> +			printk(KERN_WARNING "WARNING: at %s:%u\n",
>  			       file, line);
>  		else
> -			printk(KERN_ERR "Badness at %p "
> +			printk(KERN_WARNING "WARNING: at %p "
>  			       "[verbose debug info unavailable]\n",
>  			       (void *)bugaddr);
>  
> +        	print_modules();
>  		show_regs(regs);
>  		add_taint(BUG_GET_TAINT(bug));
>  		return BUG_TRAP_TYPE_WARN;
>  	}
>  
> +	printk(KERN_EMERG "------------[ cut here ]------------\n");
> +

Hm... Why do you use KERN_EMERG here?

>  	if (file)
>  		printk(KERN_CRIT "kernel BUG at %s:%u!\n",
>  		       file, line);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-- 
 Kirill A. Shutemov

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-06-26 20:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-26 19:10 [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one Anton Blanchard
2010-06-26 19:13 ` [PATCH 2/2] Add oops end marker to lib/bug.c WARN implementation Anton Blanchard
2010-06-26 19:54 ` [PATCH 1/2] Make lib/bug.c WARN implementation match the kernel/panic.c one Kirill A. Shutemov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.