Re: [S390] Use generic bug.

2007-03-06 Thread David Miller
From: Heiko Carstens <[EMAIL PROTECTED]>
Date: Tue, 6 Mar 2007 12:59:17 +0100

> On Mon, Mar 05, 2007 at 02:56:29PM -0800, David Miller wrote:
> > From: Martin Schwidefsky <[EMAIL PROTECTED]>
> > Date: Mon, 5 Mar 2007 23:43:54 +0100
> > 
> > > + if (__builtin_constant_p(__ret_warn_on)) {  \
> > > + if (__ret_warn_on)  \
> > > + __EMIT_BUG(BUGFLAG_WARNING);\
> > 
> > I see we'll have this construct on powerpc, parisc and now s390.
> > 
> > But if it's going to trigger essentially at compile time, I
> > think it's much better to BUILD_BUG_ON() in this case instead
> > of counting on the code path to actually run and the user to
> > notice and report the kernel log message.
> 
> So something like WARN_ON(1) won't compile, but BUG_ON(1) still
> would? Seems odd to me.
> Also since there is nothing like WARN(), you have to use WARN_ON(1).
> Btw.: sparc64 has plenty of these ;)

I see.  It's for case where we can't put the test into the
WARN_ON() call.

Thanks for the explanation, I hadn't considered such cases.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [S390] Use generic bug.

2007-03-06 Thread Heiko Carstens
On Mon, Mar 05, 2007 at 02:56:29PM -0800, David Miller wrote:
> From: Martin Schwidefsky <[EMAIL PROTECTED]>
> Date: Mon, 5 Mar 2007 23:43:54 +0100
> 
> > +   if (__builtin_constant_p(__ret_warn_on)) {  \
> > +   if (__ret_warn_on)  \
> > +   __EMIT_BUG(BUGFLAG_WARNING);\
> 
> I see we'll have this construct on powerpc, parisc and now s390.
> 
> But if it's going to trigger essentially at compile time, I
> think it's much better to BUILD_BUG_ON() in this case instead
> of counting on the code path to actually run and the user to
> notice and report the kernel log message.

So something like WARN_ON(1) won't compile, but BUG_ON(1) still
would? Seems odd to me.
Also since there is nothing like WARN(), you have to use WARN_ON(1).
Btw.: sparc64 has plenty of these ;)

I would prefer to have something like a per arch defined WARN()
and a common code WARN_ON() like we have it already for BUG_ON().
Then I would agree: if WARN_ON() is used with a constant the build
should fail. Just to tell the author that he did something wrong
or simply should use WARN(). And of course the existing BUG_ON()
could be converted as well.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [S390] Use generic bug.

2007-03-06 Thread Heiko Carstens
On Mon, Mar 05, 2007 at 02:56:29PM -0800, David Miller wrote:
 From: Martin Schwidefsky [EMAIL PROTECTED]
 Date: Mon, 5 Mar 2007 23:43:54 +0100
 
  +   if (__builtin_constant_p(__ret_warn_on)) {  \
  +   if (__ret_warn_on)  \
  +   __EMIT_BUG(BUGFLAG_WARNING);\
 
 I see we'll have this construct on powerpc, parisc and now s390.
 
 But if it's going to trigger essentially at compile time, I
 think it's much better to BUILD_BUG_ON() in this case instead
 of counting on the code path to actually run and the user to
 notice and report the kernel log message.

So something like WARN_ON(1) won't compile, but BUG_ON(1) still
would? Seems odd to me.
Also since there is nothing like WARN(), you have to use WARN_ON(1).
Btw.: sparc64 has plenty of these ;)

I would prefer to have something like a per arch defined WARN()
and a common code WARN_ON() like we have it already for BUG_ON().
Then I would agree: if WARN_ON() is used with a constant the build
should fail. Just to tell the author that he did something wrong
or simply should use WARN(). And of course the existing BUG_ON()
could be converted as well.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [S390] Use generic bug.

2007-03-06 Thread David Miller
From: Heiko Carstens [EMAIL PROTECTED]
Date: Tue, 6 Mar 2007 12:59:17 +0100

 On Mon, Mar 05, 2007 at 02:56:29PM -0800, David Miller wrote:
  From: Martin Schwidefsky [EMAIL PROTECTED]
  Date: Mon, 5 Mar 2007 23:43:54 +0100
  
   + if (__builtin_constant_p(__ret_warn_on)) {  \
   + if (__ret_warn_on)  \
   + __EMIT_BUG(BUGFLAG_WARNING);\
  
  I see we'll have this construct on powerpc, parisc and now s390.
  
  But if it's going to trigger essentially at compile time, I
  think it's much better to BUILD_BUG_ON() in this case instead
  of counting on the code path to actually run and the user to
  notice and report the kernel log message.
 
 So something like WARN_ON(1) won't compile, but BUG_ON(1) still
 would? Seems odd to me.
 Also since there is nothing like WARN(), you have to use WARN_ON(1).
 Btw.: sparc64 has plenty of these ;)

I see.  It's for case where we can't put the test into the
WARN_ON() call.

Thanks for the explanation, I hadn't considered such cases.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [S390] Use generic bug.

2007-03-05 Thread David Miller
From: Martin Schwidefsky <[EMAIL PROTECTED]>
Date: Mon, 5 Mar 2007 23:43:54 +0100

> + if (__builtin_constant_p(__ret_warn_on)) {  \
> + if (__ret_warn_on)  \
> + __EMIT_BUG(BUGFLAG_WARNING);\

I see we'll have this construct on powerpc, parisc and now s390.

But if it's going to trigger essentially at compile time, I
think it's much better to BUILD_BUG_ON() in this case instead
of counting on the code path to actually run and the user to
notice and report the kernel log message.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[S390] Use generic bug.

2007-03-05 Thread Martin Schwidefsky
From: Heiko Carstens <[EMAIL PROTECTED]>

[S390] Use generic bug.

Generic bug implementation for s390. Will increase the value of the
console output on BUG() statements since registers r0-r5,r14 will
not be clobbered by a printk() call that was previously done before
the illegal instruction of BUG() was hit.
Also implements an architecture specific WARN_ON(). Output of that
could be increased but requires common code change.

Signed-off-by: Heiko Carstens <[EMAIL PROTECTED]>
Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
---

 arch/s390/Kconfig  |5 ++
 arch/s390/defconfig|2 +
 arch/s390/kernel/module.c  |4 +-
 arch/s390/kernel/traps.c   |   17 --
 arch/s390/kernel/vmlinux.lds.S |   10 +
 include/asm-s390/bug.h |   69 +
 6 files changed, 89 insertions(+), 18 deletions(-)

diff -urpN linux-2.6/arch/s390/defconfig linux-2.6-patched/arch/s390/defconfig
--- linux-2.6/arch/s390/defconfig   2007-03-05 22:51:47.0 +0100
+++ linux-2.6-patched/arch/s390/defconfig   2007-03-05 22:52:02.0 
+0100
@@ -12,6 +12,7 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_BUG=y
 CONFIG_NO_IOMEM=y
 CONFIG_S390=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -705,6 +706,7 @@ CONFIG_DEBUG_MUTEXES=y
 CONFIG_DEBUG_SPINLOCK_SLEEP=y
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 # CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_LIST is not set
diff -urpN linux-2.6/arch/s390/Kconfig linux-2.6-patched/arch/s390/Kconfig
--- linux-2.6/arch/s390/Kconfig 2007-03-05 22:51:51.0 +0100
+++ linux-2.6-patched/arch/s390/Kconfig 2007-03-05 22:52:02.0 +0100
@@ -41,6 +41,11 @@ config GENERIC_HWEIGHT
 config GENERIC_TIME
def_bool y
 
+config GENERIC_BUG
+   bool
+   depends on BUG
+   default y
+
 config NO_IOMEM
def_bool y
 
diff -urpN linux-2.6/arch/s390/kernel/module.c 
linux-2.6-patched/arch/s390/kernel/module.c
--- linux-2.6/arch/s390/kernel/module.c 2007-03-05 22:51:29.0 +0100
+++ linux-2.6-patched/arch/s390/kernel/module.c 2007-03-05 22:52:02.0 
+0100
@@ -31,6 +31,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #if 0
 #define DEBUGP printk
@@ -398,9 +399,10 @@ int module_finalize(const Elf_Ehdr *hdr,
struct module *me)
 {
vfree(me->arch.syminfo);
-   return 0;
+   return module_bug_finalize(hdr, sechdrs, me);
 }
 
 void module_arch_cleanup(struct module *mod)
 {
+   module_bug_cleanup(mod);
 }
diff -urpN linux-2.6/arch/s390/kernel/traps.c 
linux-2.6-patched/arch/s390/kernel/traps.c
--- linux-2.6/arch/s390/kernel/traps.c  2007-03-05 22:52:02.0 +0100
+++ linux-2.6-patched/arch/s390/kernel/traps.c  2007-03-05 22:52:02.0 
+0100
@@ -30,7 +30,7 @@
 #include 
 #include 
 #include 
-
+#include 
 #include 
 #include 
 #include 
@@ -297,6 +297,11 @@ report_user_fault(long interruption_code
 #endif
 }
 
+int is_valid_bugaddr(unsigned long addr)
+{
+   return 1;
+}
+
 static void __kprobes inline do_trap(long interruption_code, int signr,
char *str, struct pt_regs *regs,
siginfo_t *info)
@@ -323,8 +328,14 @@ static void __kprobes inline do_trap(lon
 fixup = search_exception_tables(regs->psw.addr & 
PSW_ADDR_INSN);
 if (fixup)
 regs->psw.addr = fixup->fixup | PSW_ADDR_AMODE;
-else
-die(str, regs, interruption_code);
+   else {
+   enum bug_trap_type btt;
+
+   btt = report_bug(regs->psw.addr & PSW_ADDR_INSN);
+   if (btt == BUG_TRAP_TYPE_WARN)
+   return;
+   die(str, regs, interruption_code);
+   }
 }
 }
 
diff -urpN linux-2.6/arch/s390/kernel/vmlinux.lds.S 
linux-2.6-patched/arch/s390/kernel/vmlinux.lds.S
--- linux-2.6/arch/s390/kernel/vmlinux.lds.S2007-03-05 22:51:29.0 
+0100
+++ linux-2.6-patched/arch/s390/kernel/vmlinux.lds.S2007-03-05 
22:52:02.0 +0100
@@ -45,6 +45,8 @@ SECTIONS
   __ex_table : { *(__ex_table) }
   __stop___ex_table = .;
 
+  BUG_TABLE
+
   .data : {/* Data */
*(.data)
CONSTRUCTORS
@@ -77,6 +79,12 @@ SECTIONS
*(.init.text)
_einittext = .;
   }
+  /*
+   * .exit.text is discarded at runtime, not link time,
+   * to deal with references from __bug_table
+   */
+  .exit.text :  { *(.exit.text) }
+
   .init.data : { *(.init.data) }
   . = ALIGN(256);
   __setup_start = .;
@@ -116,7 +124,7 @@ SECTIONS
 
   /* Sections to be discarded */
   /DISCARD/ : {
-

[S390] Use generic bug.

2007-03-05 Thread Martin Schwidefsky
From: Heiko Carstens [EMAIL PROTECTED]

[S390] Use generic bug.

Generic bug implementation for s390. Will increase the value of the
console output on BUG() statements since registers r0-r5,r14 will
not be clobbered by a printk() call that was previously done before
the illegal instruction of BUG() was hit.
Also implements an architecture specific WARN_ON(). Output of that
could be increased but requires common code change.

Signed-off-by: Heiko Carstens [EMAIL PROTECTED]
Signed-off-by: Martin Schwidefsky [EMAIL PROTECTED]
---

 arch/s390/Kconfig  |5 ++
 arch/s390/defconfig|2 +
 arch/s390/kernel/module.c  |4 +-
 arch/s390/kernel/traps.c   |   17 --
 arch/s390/kernel/vmlinux.lds.S |   10 +
 include/asm-s390/bug.h |   69 +
 6 files changed, 89 insertions(+), 18 deletions(-)

diff -urpN linux-2.6/arch/s390/defconfig linux-2.6-patched/arch/s390/defconfig
--- linux-2.6/arch/s390/defconfig   2007-03-05 22:51:47.0 +0100
+++ linux-2.6-patched/arch/s390/defconfig   2007-03-05 22:52:02.0 
+0100
@@ -12,6 +12,7 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_BUG=y
 CONFIG_NO_IOMEM=y
 CONFIG_S390=y
 CONFIG_DEFCONFIG_LIST=/lib/modules/$UNAME_RELEASE/.config
@@ -705,6 +706,7 @@ CONFIG_DEBUG_MUTEXES=y
 CONFIG_DEBUG_SPINLOCK_SLEEP=y
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 # CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_LIST is not set
diff -urpN linux-2.6/arch/s390/Kconfig linux-2.6-patched/arch/s390/Kconfig
--- linux-2.6/arch/s390/Kconfig 2007-03-05 22:51:51.0 +0100
+++ linux-2.6-patched/arch/s390/Kconfig 2007-03-05 22:52:02.0 +0100
@@ -41,6 +41,11 @@ config GENERIC_HWEIGHT
 config GENERIC_TIME
def_bool y
 
+config GENERIC_BUG
+   bool
+   depends on BUG
+   default y
+
 config NO_IOMEM
def_bool y
 
diff -urpN linux-2.6/arch/s390/kernel/module.c 
linux-2.6-patched/arch/s390/kernel/module.c
--- linux-2.6/arch/s390/kernel/module.c 2007-03-05 22:51:29.0 +0100
+++ linux-2.6-patched/arch/s390/kernel/module.c 2007-03-05 22:52:02.0 
+0100
@@ -31,6 +31,7 @@
 #include linux/string.h
 #include linux/kernel.h
 #include linux/moduleloader.h
+#include linux/bug.h
 
 #if 0
 #define DEBUGP printk
@@ -398,9 +399,10 @@ int module_finalize(const Elf_Ehdr *hdr,
struct module *me)
 {
vfree(me-arch.syminfo);
-   return 0;
+   return module_bug_finalize(hdr, sechdrs, me);
 }
 
 void module_arch_cleanup(struct module *mod)
 {
+   module_bug_cleanup(mod);
 }
diff -urpN linux-2.6/arch/s390/kernel/traps.c 
linux-2.6-patched/arch/s390/kernel/traps.c
--- linux-2.6/arch/s390/kernel/traps.c  2007-03-05 22:52:02.0 +0100
+++ linux-2.6-patched/arch/s390/kernel/traps.c  2007-03-05 22:52:02.0 
+0100
@@ -30,7 +30,7 @@
 #include linux/kallsyms.h
 #include linux/reboot.h
 #include linux/kprobes.h
-
+#include linux/bug.h
 #include asm/system.h
 #include asm/uaccess.h
 #include asm/io.h
@@ -297,6 +297,11 @@ report_user_fault(long interruption_code
 #endif
 }
 
+int is_valid_bugaddr(unsigned long addr)
+{
+   return 1;
+}
+
 static void __kprobes inline do_trap(long interruption_code, int signr,
char *str, struct pt_regs *regs,
siginfo_t *info)
@@ -323,8 +328,14 @@ static void __kprobes inline do_trap(lon
 fixup = search_exception_tables(regs-psw.addr  
PSW_ADDR_INSN);
 if (fixup)
 regs-psw.addr = fixup-fixup | PSW_ADDR_AMODE;
-else
-die(str, regs, interruption_code);
+   else {
+   enum bug_trap_type btt;
+
+   btt = report_bug(regs-psw.addr  PSW_ADDR_INSN);
+   if (btt == BUG_TRAP_TYPE_WARN)
+   return;
+   die(str, regs, interruption_code);
+   }
 }
 }
 
diff -urpN linux-2.6/arch/s390/kernel/vmlinux.lds.S 
linux-2.6-patched/arch/s390/kernel/vmlinux.lds.S
--- linux-2.6/arch/s390/kernel/vmlinux.lds.S2007-03-05 22:51:29.0 
+0100
+++ linux-2.6-patched/arch/s390/kernel/vmlinux.lds.S2007-03-05 
22:52:02.0 +0100
@@ -45,6 +45,8 @@ SECTIONS
   __ex_table : { *(__ex_table) }
   __stop___ex_table = .;
 
+  BUG_TABLE
+
   .data : {/* Data */
*(.data)
CONSTRUCTORS
@@ -77,6 +79,12 @@ SECTIONS
*(.init.text)
_einittext = .;
   }
+  /*
+   * .exit.text is discarded at runtime, not link time,
+   * to deal with references from __bug_table
+   */
+  .exit.text :  { *(.exit.text) }
+
   .init.data : { *(.init.data) }
   . = ALIGN(256);
   __setup_start

Re: [S390] Use generic bug.

2007-03-05 Thread David Miller
From: Martin Schwidefsky [EMAIL PROTECTED]
Date: Mon, 5 Mar 2007 23:43:54 +0100

 + if (__builtin_constant_p(__ret_warn_on)) {  \
 + if (__ret_warn_on)  \
 + __EMIT_BUG(BUGFLAG_WARNING);\

I see we'll have this construct on powerpc, parisc and now s390.

But if it's going to trigger essentially at compile time, I
think it's much better to BUILD_BUG_ON() in this case instead
of counting on the code path to actually run and the user to
notice and report the kernel log message.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/