| /* SPDX-License-Identifier: GPL-2.0-only */ |
| * User memory copying routines for the Hexagon Kernel |
| * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. |
| /* The right way to do this involves valignb |
| * The easy way to do this is only speed up src/dest similar alignment. |
| * Copy to/from user are the same, except that for packets with a load and |
| * a store, I don't know how to tell which kind of exception we got. |
| * Therefore, we duplicate the function, and handle faulting addresses |
| * differently for each function |
| * copy to user: stores can fault |
| #define src_dst_sav r13:12 |
| #define FUNCNAME raw_copy_to_user |
| #include "copy_user_template.S" |
| /* STORE FAULTS from COPY_TO_USER */ |
| /* Alignment loop. r2 has been updated. Return it. */ |
| /* Normal copy loops. Use dst-dst_sav to compute distance */ |
| /* dst holds best write, no need to unwind any loops */ |
| /* X - (A - B) == X + B - A */ |
| /* COPY TO USER: only stores can fail */ |