]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
s390/mm: Change comment and die() message if teid.b61 is zero
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 3 Nov 2025 15:25:32 +0000 (16:25 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Fri, 14 Nov 2025 10:34:27 +0000 (11:34 +0100)
The comments in do_protection() give the impression that a TEID, where bit
61 is zero, indicates a low address protection exception. This is not
necessarily true, and it depends on the type of Suppression-on-Protection
facility of the machine (see Princples of Operation) what this means.

Rework the comments and the die() message to reflect this. This may also
help to avoid confusion.

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/mm/fault.c

index e1ad05bfd28ad40e217a6bddb0819a3f018ece30..639c4f610fdd7ec2333b27413f155aacfdb9f4af 100644 (file)
@@ -368,20 +368,15 @@ void do_protection_exception(struct pt_regs *regs)
        if (!(regs->int_code & 0x200))
                regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16);
        /*
-        * Check for low-address protection.  This needs to be treated
-        * as a special case because the translation exception code
-        * field is not guaranteed to contain valid data in this case.
+        * If bit 61 if the TEID is not set, the remainder of the
+        * TEID is unpredictable. Special handling is required.
         */
        if (unlikely(!teid.b61)) {
                if (user_mode(regs)) {
-                       /* Low-address protection in user mode: cannot happen */
                        dump_fault_info(regs);
-                       die(regs, "Low-address protection");
+                       die(regs, "Unexpected TEID");
                }
-               /*
-                * Low-address protection in kernel mode means
-                * NULL pointer write access in kernel mode.
-                */
+               /* Assume low-address protection in kernel mode. */
                return handle_fault_error_nolock(regs, 0);
        }
        if (unlikely(cpu_has_nx() && teid.b56)) {