Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0007f1a authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky
Browse files

[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: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
parent bb11e3bd
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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

+2 −0
Original line number Diff line number Diff line
@@ -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
+3 −1
Original line number Diff line number Diff line
@@ -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);
}
+14 −3
Original line number Diff line number Diff line
@@ -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, struct pt_regs *regs)
#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,10 +328,16 @@ static void __kprobes inline do_trap(long interruption_code, int signr,
                fixup = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN);
                if (fixup)
                        regs->psw.addr = fixup->fixup | PSW_ADDR_AMODE;
                else
		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);
		}
        }
}

static inline void __user *get_check_address(struct pt_regs *regs)
{
+9 −1
Original line number Diff line number Diff line
@@ -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/ : {
	*(.exit.text) *(.exit.data) *(.exitcall.exit)
	*(.exit.data) *(.exitcall.exit)
	}

  /* Stabs debugging sections.  */
Loading