[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aEabAPB5Y9EbSPkt@gmail.com>
Date: Mon, 9 Jun 2025 10:27:44 +0200
From: Ingo Molnar <mingo@...nel.org>
To: Heiko Carstens <hca@...ux.ibm.com>
Cc: linux-kernel@...r.kernel.org,
Linus Torvalds <torvalds@...ux-foundation.org>,
Peter Zijlstra <peterz@...radead.org>, linux-arch@...r.kernel.org,
Vasily Gorbik <gor@...ux.ibm.com>,
Alexander Gordeev <agordeev@...ux.ibm.com>,
Christian Borntraeger <borntraeger@...ux.ibm.com>,
Sven Schnelle <svens@...ux.ibm.com>, linux-s390@...r.kernel.org
Subject: [PATCH 16/15] bugs/s390: Use in 'cond_str' to __EMIT_BUG()
* Heiko Carstens <hca@...ux.ibm.com> wrote:
> On Thu, May 15, 2025 at 02:46:39PM +0200, Ingo Molnar wrote:
> > Pass in the condition string from __WARN_FLAGS(), but do not
> > concatenate it with __FILE__, because the __bug_table is
> > apparently indexed by 16 bits and increasing string size
> > overflows it on defconfig builds.
>
> Could you provide your change which didn't work?
>
> I cannot see how anything would overflow. Trying the below on top of
> your series seems to work like expected.
>
> In order to keep things easy this drops the mergeable section trick
> and results in a small increase of the rodata section, but I doubt
> that would explain what you have seen.
>
> Also allyesconfig builds without errors.
>
> diff --git a/arch/s390/include/asm/bug.h b/arch/s390/include/asm/bug.h
> index 30f8785a01f5..837bfbde0c51 100644
> --- a/arch/s390/include/asm/bug.h
> +++ b/arch/s390/include/asm/bug.h
> @@ -11,16 +11,14 @@
> #define __EMIT_BUG(cond_str, x) do { \
> asm_inline volatile( \
> "0: mc 0,0\n" \
> - ".section .rodata.str,\"aMS\",@progbits,1\n" \
> - "1: .asciz \""__FILE__"\"\n" \
> - ".previous\n" \
> ".section __bug_table,\"aw\"\n" \
> - "2: .long 0b-.\n" \
> - " .long 1b-.\n" \
> - " .short %0,%1\n" \
> - " .org 2b+%2\n" \
> + "1: .long 0b-.\n" \
> + " .long %0-.\n" \
> + " .short %1,%2\n" \
> + " .org 1b+%3\n" \
> ".previous\n" \
> - : : "i" (__LINE__), \
> + : : "i" (WARN_CONDITION_STR(cond_str) __FILE__),\
> + "i" (__LINE__), \
> "i" (x), \
> "i" (sizeof(struct bug_entry))); \
> } while (0)
So I'm not sure what happened: I tried to reproduce what I did
originally, but my naive patch ran into assembler build errors when a
WARN_ON() macro tried to use the '%' C operator, such as
fs/crypto/crypto.c:123:
include/linux/compiler_types.h:497:20: error: invalid 'asm': invalid %-code
arch/s390/include/asm/bug.h:12:2: note: in expansion of macro 'asm_inline'
arch/s390/include/asm/bug.h:50:2: note: in expansion of macro '__EMIT_BUG'
include/asm-generic/bug.h:119:3: note: in expansion of macro '__WARN_FLAGS'
fs/crypto/crypto.c:123:6: note: in expansion of macro 'WARN_ON_ONCE'
Which corresponds to:
if (WARN_ON_ONCE(len % FSCRYPT_CONTENTS_ALIGNMENT != 0))
return -EINVAL;
I'm quite sure I never saw these build errors - I saw linker errors
related to the u16 overflow I documented in the changelog. (Note to
self: copy & paste more of the build error context next time around.)
Your version doesn't have that build problem, so I picked it up with
the changelog below and your Signed-off-by. Does that look good to you?
Thanks,
Ingo
===================================>
>From 7128294ca8b997efb1d85c7405c8c6e9af1a170d Mon Sep 17 00:00:00 2001
From: Heiko Carstens <hca@...ux.ibm.com>
Date: Tue, 20 May 2025 15:39:27 +0200
Subject: [PATCH] bugs/s390: Use 'cond_str' in __EMIT_BUG()
In order to keep things easy this drops the mergeable section trick
and results in a small increase of the rodata section.
Signed-off-by: Heiko Carstens <hca@...ux.ibm.com>
Signed-off-by: Ingo Molnar <mingo@...nel.org>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Peter Zijlstra <peterz@...radead.org>
Cc: linux-arch@...r.kernel.org
Cc: Vasily Gorbik <gor@...ux.ibm.com>
Cc: Alexander Gordeev <agordeev@...ux.ibm.com>
Cc: Christian Borntraeger <borntraeger@...ux.ibm.com>
Cc: Sven Schnelle <svens@...ux.ibm.com>
Cc: linux-s390@...r.kernel.org
Link: https://lore.kernel.org/r/20250520133927.7932C19-hca@linux.ibm.com
---
arch/s390/include/asm/bug.h | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/arch/s390/include/asm/bug.h b/arch/s390/include/asm/bug.h
index 30f8785a01f5..837bfbde0c51 100644
--- a/arch/s390/include/asm/bug.h
+++ b/arch/s390/include/asm/bug.h
@@ -11,16 +11,14 @@
#define __EMIT_BUG(cond_str, x) do { \
asm_inline volatile( \
"0: mc 0,0\n" \
- ".section .rodata.str,\"aMS\",@progbits,1\n" \
- "1: .asciz \""__FILE__"\"\n" \
- ".previous\n" \
".section __bug_table,\"aw\"\n" \
- "2: .long 0b-.\n" \
- " .long 1b-.\n" \
- " .short %0,%1\n" \
- " .org 2b+%2\n" \
+ "1: .long 0b-.\n" \
+ " .long %0-.\n" \
+ " .short %1,%2\n" \
+ " .org 1b+%3\n" \
".previous\n" \
- : : "i" (__LINE__), \
+ : : "i" (WARN_CONDITION_STR(cond_str) __FILE__),\
+ "i" (__LINE__), \
"i" (x), \
"i" (sizeof(struct bug_entry))); \
} while (0)
Powered by blists - more mailing lists