From: Heiko Carstens <hca@linux.ibm.com>
To: Ingo Molnar <mingo@redhat.com>,
Naresh Kamboju <naresh.kamboju@linaro.org>,
Anders Roxell <anders.roxell@linaro.org>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Subject: [PATCH 2/2] bugs/s390: Use inline assembly without input operands
Date: Tue, 17 Jun 2025 15:50:42 +0200 [thread overview]
Message-ID: <20250617135042.1878068-3-hca@linux.ibm.com> (raw)
In-Reply-To: <20250617135042.1878068-1-hca@linux.ibm.com>
The recent change which adds DEBUG_BUGVERBOSE_DETAILED support for s390
changed the __EMIT_BUG() inline assembly so it has a string as immediate
input operand. Some older gcc variants cannot handle strings as immediate
input operands for inline assemblies. Doing so may result in compile
errors:
mm/mempool.c: In function 'remove_element':
include/linux/compiler_types.h:497:20: warning: asm operand 0 probably
doesn't match constraints
#define asm_inline asm __inline
^~~
arch/s390/include/asm/bug.h:12:2: note: in expansion of macro 'asm_inline'
asm_inline volatile( \
^~~~~~~~~~
arch/s390/include/asm/bug.h:43:2: note: in expansion of macro '__EMIT_BUG'
__EMIT_BUG("", 0); \
^~~~~~~~~~
include/asm-generic/bug.h:77:57: note: in expansion of macro 'BUG'
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
^~~
mm/mempool.c:149:2: note: in expansion of macro 'BUG_ON'
BUG_ON(pool->curr_nr < 0);
^~~~~~
include/linux/compiler_types.h:497:20: error: impossible constraint in 'asm'
#define asm_inline asm __inline
^~~
Rewrite the s390 generic bug support very similar to arm64 and loongarch,
and get rid of all input operands to fix this.
Fixes: 45c79ca947c9 ("bugs/s390: Use 'cond_str' in __EMIT_BUG()")
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Closes: https://lore.kernel.org/r/CA+G9fYuu5r34=bndUYWNxe_yLgBaPGXmK9WP3WTtoXMs_2LX-Q@mail.gmail.com
Cc: Anders Roxell <anders.roxell@linaro.org>
Cc: Naresh Kamboju <naresh.kamboju@linaro.org>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
---
arch/s390/include/asm/bug.h | 81 +++++++++++++++++++------------------
1 file changed, 41 insertions(+), 40 deletions(-)
diff --git a/arch/s390/include/asm/bug.h b/arch/s390/include/asm/bug.h
index 58ab4efd9dd5..a185855ab158 100644
--- a/arch/s390/include/asm/bug.h
+++ b/arch/s390/include/asm/bug.h
@@ -2,54 +2,55 @@
#ifndef _ASM_S390_BUG_H
#define _ASM_S390_BUG_H
-#include <linux/compiler.h>
+#include <linux/stringify.h>
-#ifdef CONFIG_BUG
+#ifndef CONFIG_DEBUG_BUGVERBOSE
+#define _BUGVERBOSE_LOCATION(file, line)
+#else
+#define __BUGVERBOSE_LOCATION(file, line) \
+ .pushsection .rodata.str, "aMS", @progbits, 1; \
+ 10002: .string file; \
+ .popsection; \
+ \
+ .long 10002b - .; \
+ .short line;
+#define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line)
+#endif
-#ifdef CONFIG_DEBUG_BUGVERBOSE
+#ifndef CONFIG_GENERIC_BUG
+#define __BUG_ENTRY(cond_str, flags)
+#else
+#define __BUG_ENTRY(cond_str, flags) \
+ .pushsection __bug_table, "aw"; \
+ .align 4; \
+ 10000: .long 10001f - .; \
+ _BUGVERBOSE_LOCATION(WARN_CONDITION_STR(cond_str) __FILE__, __LINE__) \
+ .short flags; \
+ .popsection; \
+ 10001:
+#endif
-#define __EMIT_BUG(cond_str, x) do { \
- asm_inline volatile( \
- "0: mc 0,0\n" \
- ".section __bug_table,\"aw\"\n" \
- "1: .long 0b-.\n" \
- " .long %0-.\n" \
- " .short %1,%2\n" \
- " .org 1b+%3\n" \
- ".previous\n" \
- : : "i" (WARN_CONDITION_STR(cond_str) __FILE__),\
- "i" (__LINE__), \
- "i" (x), \
- "i" (sizeof(struct bug_entry))); \
+#define ASM_BUG_FLAGS(cond_str, flags) \
+ __BUG_ENTRY(cond_str, flags) \
+ mc 0,0
+
+#define ASM_BUG() ASM_BUG_FLAGS("", 0)
+
+#define __BUG_FLAGS(cond_str, flags) \
+ asm_inline volatile(__stringify(ASM_BUG_FLAGS(cond_str, flags)));
+
+#define __WARN_FLAGS(cond_str, flags) \
+do { \
+ __BUG_FLAGS(cond_str, BUGFLAG_WARNING|(flags)); \
} while (0)
-#else /* CONFIG_DEBUG_BUGVERBOSE */
-
-#define __EMIT_BUG(cond_str, x) do { \
- asm_inline volatile( \
- "0: mc 0,0\n" \
- ".section __bug_table,\"aw\"\n" \
- "1: .long 0b-.\n" \
- " .short %0\n" \
- " .org 1b+%1\n" \
- ".previous\n" \
- : : "i" (x), \
- "i" (sizeof(struct bug_entry))); \
-} while (0)
-
-#endif /* CONFIG_DEBUG_BUGVERBOSE */
-
-#define BUG() do { \
- __EMIT_BUG("", 0); \
- unreachable(); \
-} while (0)
-
-#define __WARN_FLAGS(cond_str, flags) do { \
- __EMIT_BUG(cond_str, BUGFLAG_WARNING|(flags)); \
+#define BUG() \
+do { \
+ __BUG_FLAGS("", 0); \
+ unreachable(); \
} while (0)
#define HAVE_ARCH_BUG
-#endif /* CONFIG_BUG */
#include <asm-generic/bug.h>
--
2.48.1
next prev parent reply other threads:[~2025-06-17 13:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-17 13:50 [PATCH 0/2] bugs/s390: Fix compile error with old gcc versions Heiko Carstens
2025-06-17 13:50 ` [PATCH 1/2] bugs/s390: Remove private WARN_ON() implementation Heiko Carstens
2025-06-20 13:15 ` Alexander Gordeev
2025-06-17 13:50 ` Heiko Carstens [this message]
2025-06-20 13:15 ` [PATCH 2/2] bugs/s390: Use inline assembly without input operands Alexander Gordeev
2025-06-25 9:31 ` [PATCH 0/2] bugs/s390: Fix compile error with old gcc versions Heiko Carstens
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250617135042.1878068-3-hca@linux.ibm.com \
--to=hca@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=anders.roxell@linaro.org \
--cc=borntraeger@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=naresh.kamboju@linaro.org \
--cc=svens@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.