]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
parisc: Fix itlb miss handler for 64-bit programs
authorHelge Deller <deller@gmx.de>
Tue, 10 Sep 2024 16:32:24 +0000 (18:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 13:08:19 +0000 (15:08 +0200)
commit 9542130937e9dc707dd7c6b7af73326437da2d50 upstream.

For an itlb miss when executing code above 4 Gb on ILP64 adjust the
iasq/iaoq in the same way isr/ior was adjusted.  This fixes signal
delivery for the 64-bit static test program from
http://ftp.parisc-linux.org/src/64bit.tar.gz.  Note that signals are
handled by the signal trampoline code in the 64-bit VDSO which is mapped
into high userspace memory region above 4GB for 64-bit processes.

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v4.19+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/parisc/kernel/entry.S

index 25bef679290f73c1a0ca284f48dbccdc40712656..b86ba022136ee04c236a15604e7fb5a7bd626dcd 100644 (file)
@@ -1071,8 +1071,7 @@ ENTRY_CFI(intr_save)              /* for os_hpmc */
        STREG           %r16, PT_ISR(%r29)
        STREG           %r17, PT_IOR(%r29)
 
-#if 0 && defined(CONFIG_64BIT)
-       /* Revisit when we have 64-bit code above 4Gb */
+#if defined(CONFIG_64BIT)
        b,n             intr_save2
 
 skip_save_ior:
@@ -1080,8 +1079,7 @@ skip_save_ior:
         * need to adjust iasq/iaoq here in the same way we adjusted isr/ior
         * above.
         */
-       extrd,u,*       %r8,PSW_W_BIT,1,%r1
-       cmpib,COND(=),n 1,%r1,intr_save2
+       bb,COND(>=),n   %r8,PSW_W_BIT,intr_save2
        LDREG           PT_IASQ0(%r29), %r16
        LDREG           PT_IAOQ0(%r29), %r17
        /* adjust iasq/iaoq */