lkml.org 
[lkml]   [2017]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 14/86] metag/usercopy: Add missing fixups
    Date
    From: James Hogan <james.hogan@imgtec.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit b884a190afcecdbef34ca508ea5ee88bb7c77861 upstream.

    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: 373cd784d0fc ("metag: Memory handling")
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: linux-metag@vger.kernel.org
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    arch/metag/lib/usercopy.c | 72 +++++++++++++++++++++++++++++++----------------
    1 file changed, 48 insertions(+), 24 deletions(-)

    diff --git a/arch/metag/lib/usercopy.c b/arch/metag/lib/usercopy.c
    index e09c95ba028c..2792fc621088 100644
    --- a/arch/metag/lib/usercopy.c
    +++ b/arch/metag/lib/usercopy.c
    @@ -259,27 +259,31 @@
    "MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
    "22:\n" \
    "MSETL [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
    - "SUB %3, %3, #32\n" \
    "23:\n" \
    - "MGETL D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
    + "SUB %3, %3, #32\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" \
    + "26:\n" \
    "SUB %3, %3, #32\n" \
    "DCACHE [%1+#-64], D0Ar6\n" \
    "BR $Lloop"id"\n" \
    \
    "MOV RAPF, %1\n" \
    - "25:\n" \
    + "27:\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" \
    + "29:\n" \
    "SUB %3, %3, #32\n" \
    - "27:\n" \
    + "30:\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" \
    + "32:\n" \
    "SUB %0, %0, #8\n" \
    - "29:\n" \
    + "33:\n" \
    "SETL [%0++], D0.7, D1.7\n" \
    "SUB %3, %3, #32\n" \
    "1:" \
    @@ -311,7 +315,11 @@
    " .long 26b,3b\n" \
    " .long 27b,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" \
    : "=r" (to), "=r" (from), "=r" (ret), "=d" (n) \
    : "0" (to), "1" (from), "2" (ret), "3" (n) \
    @@ -402,47 +410,55 @@
    "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
    "22:\n" \
    "MSETD [%0++], D0FrT, D0.5, D0.6, D0.7\n" \
    - "SUB %3, %3, #16\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" \
    - "25:\n" \
    + "24:\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" \
    + "26:\n" \
    "SUB %3, %3, #16\n" \
    "27:\n" \
    "MGETD D0FrT, D0.5, D0.6, D0.7, [%1++]\n" \
    "28:\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" \
    "DCACHE [%1+#-64], D0Ar6\n" \
    "BR $Lloop"id"\n" \
    \
    "MOV RAPF, %1\n" \
    - "29:\n" \
    + "33:\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" \
    + "35:\n" \
    "SUB %3, %3, #16\n" \
    - "31:\n" \
    + "36:\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" \
    + "38:\n" \
    "SUB %3, %3, #16\n" \
    - "33:\n" \
    + "39:\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" \
    + "41:\n" \
    "SUB %3, %3, #16\n" \
    - "35:\n" \
    + "42:\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" \
    + "44:\n" \
    "SUB %0, %0, #4\n" \
    - "37:\n" \
    + "45:\n" \
    "SETD [%0++], D0.7\n" \
    "SUB %3, %3, #16\n" \
    "1:" \
    @@ -482,7 +498,15 @@
    " .long 34b,3b\n" \
    " .long 35b,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" \
    : "=r" (to), "=r" (from), "=r" (ret), "=d" (n) \
    : "0" (to), "1" (from), "2" (ret), "3" (n) \
    --
    2.12.2
    \
     
     \ /
      Last update: 2017-05-04 11:26    [W:5.071 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site