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?