Commit b884a190 authored by James Hogan's avatar James Hogan

metag/usercopy: Add missing fixups

The rapf copy loops in the Meta usercopy code is missing some extable
entries for HTP cores with unaligned access checking enabled, where
faults occur on the instruction immediately after the faulting access.

Add the fixup labels and extable entries for these cases so that corner
case user copy failures don't cause kernel crashes.

Fixes: 373cd784 ("metag: Memory handling")
Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
Cc: linux-metag@vger.kernel.org
Cc: stable@vger.kernel.org
parent 2c0b1df8
...@@ -259,27 +259,31 @@ ...@@ -259,27 +259,31 @@
"MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"22:\n" \ "22:\n" \
"MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"SUB %3, %3, #32\n" \
"23:\n" \ "23:\n" \
"MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "SUB %3, %3, #32\n" \
"24:\n" \ "24:\n" \
"MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"25:\n" \
"MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"26:\n" \
"SUB %3, %3, #32\n" \ "SUB %3, %3, #32\n" \
"DCACHE [%1+#-64], D0Ar6\n" \ "DCACHE [%1+#-64], D0Ar6\n" \
"BR $Lloop"id"\n" \ "BR $Lloop"id"\n" \
\ \
"MOV RAPF, %1\n" \ "MOV RAPF, %1\n" \
"25:\n" \ "27:\n" \
"MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"26:\n" \ "28:\n" \
"MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"29:\n" \
"SUB %3, %3, #32\n" \ "SUB %3, %3, #32\n" \
"27:\n" \ "30:\n" \
"MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"28:\n" \ "31:\n" \
"MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"32:\n" \
"SUB %0, %0, #8\n" \ "SUB %0, %0, #8\n" \
"29:\n" \ "33:\n" \
"SETL [%0++], D0.7, D1.7\n" \ "SETL [%0++], D0.7, D1.7\n" \
"SUB %3, %3, #32\n" \ "SUB %3, %3, #32\n" \
"1:" \ "1:" \
...@@ -311,7 +315,11 @@ ...@@ -311,7 +315,11 @@
" .long 26b,3b\n" \ " .long 26b,3b\n" \
" .long 27b,3b\n" \ " .long 27b,3b\n" \
" .long 28b,3b\n" \ " .long 28b,3b\n" \
" .long 29b,4b\n" \ " .long 29b,3b\n" \
" .long 30b,3b\n" \
" .long 31b,3b\n" \
" .long 32b,3b\n" \
" .long 33b,4b\n" \
" .previous\n" \ " .previous\n" \
: "=r" (to), "=r" (from), "=r" (ret), "=d" (n) \ : "=r" (to), "=r" (from), "=r" (ret), "=d" (n) \
: "0" (to), "1" (from), "2" (ret), "3" (n) \ : "0" (to), "1" (from), "2" (ret), "3" (n) \
...@@ -402,47 +410,55 @@ ...@@ -402,47 +410,55 @@
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"22:\n" \ "22:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"SUB %3, %3, #16\n" \
"23:\n" \ "23:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"24:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"25:\n" \ "24:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"26:\n" \ "25:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"26:\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"27:\n" \ "27:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"28:\n" \ "28:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"29:\n" \
"SUB %3, %3, #16\n" \
"30:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"31:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"32:\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"DCACHE [%1+#-64], D0Ar6\n" \ "DCACHE [%1+#-64], D0Ar6\n" \
"BR $Lloop"id"\n" \ "BR $Lloop"id"\n" \
\ \
"MOV RAPF, %1\n" \ "MOV RAPF, %1\n" \
"29:\n" \ "33:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"30:\n" \ "34:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"35:\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"31:\n" \ "36:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"32:\n" \ "37:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"38:\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"33:\n" \ "39:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"34:\n" \ "40:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"41:\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"35:\n" \ "42:\n" \
"MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \ "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
"36:\n" \ "43:\n" \
"MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \ "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
"44:\n" \
"SUB %0, %0, #4\n" \ "SUB %0, %0, #4\n" \
"37:\n" \ "45:\n" \
"SETD [%0++], D0.7\n" \ "SETD [%0++], D0.7\n" \
"SUB %3, %3, #16\n" \ "SUB %3, %3, #16\n" \
"1:" \ "1:" \
...@@ -482,7 +498,15 @@ ...@@ -482,7 +498,15 @@
" .long 34b,3b\n" \ " .long 34b,3b\n" \
" .long 35b,3b\n" \ " .long 35b,3b\n" \
" .long 36b,3b\n" \ " .long 36b,3b\n" \
" .long 37b,4b\n" \ " .long 37b,3b\n" \
" .long 38b,3b\n" \
" .long 39b,3b\n" \
" .long 40b,3b\n" \
" .long 41b,3b\n" \
" .long 42b,3b\n" \
" .long 43b,3b\n" \
" .long 44b,3b\n" \
" .long 45b,4b\n" \
" .previous\n" \ " .previous\n" \
: "=r" (to), "=r" (from), "=r" (ret), "=d" (n) \ : "=r" (to), "=r" (from), "=r" (ret), "=d" (n) \
: "0" (to), "1" (from), "2" (ret), "3" (n) \ : "0" (to), "1" (from), "2" (ret), "3" (n) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment