Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.14-rc2 77 lines 1.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copy from user space to user space 4 * 5 * Copyright (C) 2012 ARM Ltd. 6 */ 7 8#include <linux/linkage.h> 9 10#include <asm/asm-uaccess.h> 11#include <asm/assembler.h> 12#include <asm/cache.h> 13 14/* 15 * Copy from user space to user space (alignment handled by the hardware) 16 * 17 * Parameters: 18 * x0 - to 19 * x1 - from 20 * x2 - n 21 * Returns: 22 * x0 - bytes not copied 23 */ 24 .macro ldrb1 reg, ptr, val 25 user_ldst 9998f, ldtrb, \reg, \ptr, \val 26 .endm 27 28 .macro strb1 reg, ptr, val 29 user_ldst 9998f, sttrb, \reg, \ptr, \val 30 .endm 31 32 .macro ldrh1 reg, ptr, val 33 user_ldst 9997f, ldtrh, \reg, \ptr, \val 34 .endm 35 36 .macro strh1 reg, ptr, val 37 user_ldst 9997f, sttrh, \reg, \ptr, \val 38 .endm 39 40 .macro ldr1 reg, ptr, val 41 user_ldst 9997f, ldtr, \reg, \ptr, \val 42 .endm 43 44 .macro str1 reg, ptr, val 45 user_ldst 9997f, sttr, \reg, \ptr, \val 46 .endm 47 48 .macro ldp1 reg1, reg2, ptr, val 49 user_ldp 9997f, \reg1, \reg2, \ptr, \val 50 .endm 51 52 .macro stp1 reg1, reg2, ptr, val 53 user_stp 9997f, \reg1, \reg2, \ptr, \val 54 .endm 55 56end .req x5 57srcin .req x15 58SYM_FUNC_START(__arch_copy_in_user) 59 add end, x0, x2 60 mov srcin, x1 61#include "copy_template.S" 62 mov x0, #0 63 ret 64SYM_FUNC_END(__arch_copy_in_user) 65EXPORT_SYMBOL(__arch_copy_in_user) 66 67 .section .fixup,"ax" 68 .align 2 699997: cmp dst, dstin 70 b.ne 9998f 71 // Before being absolutely sure we couldn't copy anything, try harder 72USER(9998f, ldtrb tmp1w, [srcin]) 73USER(9998f, sttrb tmp1w, [dst]) 74 add dst, dst, #1 759998: sub x0, end, dst // bytes not copied 76 ret 77 .previous