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 v4.8-rc4 85 lines 2.1 kB view raw
1/* 2 * Copy from user space to user space 3 * 4 * Copyright (C) 2012 ARM Ltd. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19#include <linux/linkage.h> 20 21#include <asm/alternative.h> 22#include <asm/assembler.h> 23#include <asm/cache.h> 24#include <asm/cpufeature.h> 25#include <asm/sysreg.h> 26 27/* 28 * Copy from user space to user space (alignment handled by the hardware) 29 * 30 * Parameters: 31 * x0 - to 32 * x1 - from 33 * x2 - n 34 * Returns: 35 * x0 - bytes not copied 36 */ 37 .macro ldrb1 ptr, regB, val 38 uao_user_alternative 9998f, ldrb, ldtrb, \ptr, \regB, \val 39 .endm 40 41 .macro strb1 ptr, regB, val 42 uao_user_alternative 9998f, strb, sttrb, \ptr, \regB, \val 43 .endm 44 45 .macro ldrh1 ptr, regB, val 46 uao_user_alternative 9998f, ldrh, ldtrh, \ptr, \regB, \val 47 .endm 48 49 .macro strh1 ptr, regB, val 50 uao_user_alternative 9998f, strh, sttrh, \ptr, \regB, \val 51 .endm 52 53 .macro ldr1 ptr, regB, val 54 uao_user_alternative 9998f, ldr, ldtr, \ptr, \regB, \val 55 .endm 56 57 .macro str1 ptr, regB, val 58 uao_user_alternative 9998f, str, sttr, \ptr, \regB, \val 59 .endm 60 61 .macro ldp1 ptr, regB, regC, val 62 uao_ldp 9998f, \ptr, \regB, \regC, \val 63 .endm 64 65 .macro stp1 ptr, regB, regC, val 66 uao_stp 9998f, \ptr, \regB, \regC, \val 67 .endm 68 69end .req x5 70ENTRY(__copy_in_user) 71ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(0)), ARM64_ALT_PAN_NOT_UAO, \ 72 CONFIG_ARM64_PAN) 73 add end, x0, x2 74#include "copy_template.S" 75ALTERNATIVE("nop", __stringify(SET_PSTATE_PAN(1)), ARM64_ALT_PAN_NOT_UAO, \ 76 CONFIG_ARM64_PAN) 77 mov x0, #0 78 ret 79ENDPROC(__copy_in_user) 80 81 .section .fixup,"ax" 82 .align 2 839998: sub x0, end, dst // bytes not copied 84 ret 85 .previous