s390/bug: Introduce and use monitor code macro
The first operand address of the monitor call (mc) instruction is the monitor code. Currently the monitor code is ignored, but this will change. Therefore add and use MONCODE_BUG instead of a hardcoded zero. Reviewed-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
2b71b8ab97
commit
8cbfd13601
|
|
@ -3,7 +3,11 @@
|
||||||
#define _ASM_S390_BUG_H
|
#define _ASM_S390_BUG_H
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/const.h>
|
||||||
|
|
||||||
|
#define MONCODE_BUG _AC(0, U)
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
#if defined(CONFIG_BUG) && defined(CONFIG_CC_HAS_ASM_IMMEDIATE_STRINGS)
|
#if defined(CONFIG_BUG) && defined(CONFIG_CC_HAS_ASM_IMMEDIATE_STRINGS)
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||||
|
|
@ -24,7 +28,7 @@
|
||||||
#define __BUG_ASM(cond_str, flags) \
|
#define __BUG_ASM(cond_str, flags) \
|
||||||
do { \
|
do { \
|
||||||
asm_inline volatile("\n" \
|
asm_inline volatile("\n" \
|
||||||
"0: mc 0,0\n" \
|
"0: mc %[monc](%%r0),0\n" \
|
||||||
" .section __bug_table,\"aw\"\n" \
|
" .section __bug_table,\"aw\"\n" \
|
||||||
"1: .long 0b - . # bug_entry::bug_addr\n" \
|
"1: .long 0b - . # bug_entry::bug_addr\n" \
|
||||||
__BUG_ENTRY_VERBOSE("%[frmt]", "%[file]", "%[line]") \
|
__BUG_ENTRY_VERBOSE("%[frmt]", "%[file]", "%[line]") \
|
||||||
|
|
@ -32,7 +36,8 @@ do { \
|
||||||
" .org 1b+%[size]\n" \
|
" .org 1b+%[size]\n" \
|
||||||
" .previous" \
|
" .previous" \
|
||||||
: \
|
: \
|
||||||
: [frmt] "i" (WARN_CONDITION_STR(cond_str)), \
|
: [monc] "i" (MONCODE_BUG), \
|
||||||
|
[frmt] "i" (WARN_CONDITION_STR(cond_str)), \
|
||||||
[file] "i" (__FILE__), \
|
[file] "i" (__FILE__), \
|
||||||
[line] "i" (__LINE__), \
|
[line] "i" (__LINE__), \
|
||||||
[flgs] "i" (flags), \
|
[flgs] "i" (flags), \
|
||||||
|
|
@ -54,6 +59,7 @@ do { \
|
||||||
#define HAVE_ARCH_BUG_FORMAT
|
#define HAVE_ARCH_BUG_FORMAT
|
||||||
|
|
||||||
#endif /* CONFIG_BUG && CONFIG_CC_HAS_ASM_IMMEDIATE_STRINGS */
|
#endif /* CONFIG_BUG && CONFIG_CC_HAS_ASM_IMMEDIATE_STRINGS */
|
||||||
|
#endif /* __ASSEMBLER__ */
|
||||||
|
|
||||||
#include <asm-generic/bug.h>
|
#include <asm-generic/bug.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -258,11 +258,12 @@ static void __init test_monitor_call(void)
|
||||||
if (!IS_ENABLED(CONFIG_BUG))
|
if (!IS_ENABLED(CONFIG_BUG))
|
||||||
return;
|
return;
|
||||||
asm_inline volatile(
|
asm_inline volatile(
|
||||||
" mc 0,0\n"
|
" mc %[monc](%%r0),0\n"
|
||||||
"0: lhi %[val],0\n"
|
"0: lhi %[val],0\n"
|
||||||
"1:\n"
|
"1:\n"
|
||||||
EX_TABLE(0b, 1b)
|
EX_TABLE(0b, 1b)
|
||||||
: [val] "+d" (val));
|
: [val] "+d" (val)
|
||||||
|
: [monc] "i" (MONCODE_BUG));
|
||||||
if (!val)
|
if (!val)
|
||||||
panic("Monitor call doesn't work!\n");
|
panic("Monitor call doesn't work!\n");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue