~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/hexagon/mm/copy_to_user.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  * User memory copying routines for the Hexagon Kernel
  4  *
  5  * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
  6  */
  7 
  8 /* The right way to do this involves valignb
  9  * The easy way to do this is only speed up src/dest similar alignment.
 10  */
 11 
 12 /*
 13  * Copy to/from user are the same, except that for packets with a load and
 14  * a store, I don't know how to tell which kind of exception we got.
 15  * Therefore, we duplicate the function, and handle faulting addresses
 16  * differently for each function
 17  */
 18 
 19 /*
 20  * copy to user: stores can fault
 21  */
 22 #define src_sav r13
 23 #define dst_sav r12
 24 #define src_dst_sav r13:12
 25 #define d_dbuf r15:14
 26 #define w_dbuf r15
 27 
 28 #define dst r0
 29 #define src r1
 30 #define bytes r2
 31 #define loopcount r5
 32 
 33 #define FUNCNAME raw_copy_to_user
 34 #include "copy_user_template.S"
 35 
 36         /* STORE FAULTS from COPY_TO_USER */
 37         .falign
 38 1109:
 39 2109:
 40 4109:
 41         /* Alignment loop.  r2 has been updated.  Return it. */
 42         {
 43                 r0 = r2
 44                 jumpr r31
 45         }
 46         /* Normal copy loops.  Use dst-dst_sav to compute distance */
 47         /* dst holds best write, no need to unwind any loops */
 48         /* X - (A - B) == X + B - A */
 49         .falign
 50 8189:
 51 8199:
 52 4189:
 53 4199:
 54 2189:
 55 2199:
 56 1189:
 57 1199:
 58         {
 59                 r2 += sub(dst_sav,dst)
 60         }
 61         {
 62                 r0 = r2
 63                 jumpr r31
 64         }
 65 
 66         /* COPY TO USER: only stores can fail */
 67         .section __ex_table,"a"
 68         .long 1100b,1109b
 69         .long 2100b,2109b
 70         .long 4100b,4109b
 71         .long 8180b,8189b
 72         .long 8190b,8199b
 73         .long 4180b,4189b
 74         .long 4190b,4199b
 75         .long 2180b,2189b
 76         .long 2190b,2199b
 77         .long 1180b,1189b
 78         .long 1190b,1199b
 79         .previous

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php