Re: [PATCH 4/8] s390/entry: workaround llvm's IAS limitations

From: Jonas Paulsson
Date: Mon May 16 2022 - 06:44:47 EST


I will try to get a patch for clang ready soon... /Jonas

On 2022-05-16 12:19 em, Heiko Carstens wrote:
On Mon, May 16, 2022 at 11:07:43AM +0200, Alexander Gordeev wrote:
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index a6b45eaa3450..f2f30bfba1e9 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -172,9 +172,19 @@ _LPP_OFFSET = __LC_LPP
lgr %r14,\reg
larl %r13,\start
slgr %r14,%r13
- lghi %r13,\end - \start
- clgr %r14,%r13
+#ifdef CONFIG_AS_IS_LLVM
+ clgfrl %r14,.Lrange_size\@
+#else
+ clgfi %r14,\end - \start
+#endif
jhe \outside_label
+#ifdef CONFIG_CC_IS_CLANG
+ .section .rodata, "a"
+ .align 4
+.Lrange_size\@:
+ .long \end - \start
Isn't the machine check handler refers to this memory before checking
unrecoverable storage errors (with CHKSTG macro) as result of this change?
Yes, indeed. However implementing this without another register will
be quite of a challenge. So what I would prefer in any case: just
assume that this minimal set of memory accesses work. Actually I'd
seriously like to go a bit further, and even move the checks for
storage errors back to C for two reasons:

- this would make the machine check handler entry code easier again
- it would also allow to enter the machine check handler with DAT on

After all we rely anyway on the fact that at least the local lowcore +
the page(s) which contain text are still accessible. Assuming that a
couple of page tables also work won't make this much worse, but the
code much easier.

So I'd suggest: leave this code as is, and at some later point move
"rework" the early machine check handler code.

What do you think?