mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
caab277b1d
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not see http www gnu org licenses extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 503 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Enrico Weigelt <info@metux.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190602204653.811534538@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
70 lines
1.3 KiB
ArmAsm
70 lines
1.3 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2012 ARM Ltd.
|
|
*/
|
|
|
|
#include <linux/linkage.h>
|
|
|
|
#include <asm/asm-uaccess.h>
|
|
#include <asm/assembler.h>
|
|
#include <asm/cache.h>
|
|
|
|
/*
|
|
* Copy to user space from a kernel buffer (alignment handled by the hardware)
|
|
*
|
|
* Parameters:
|
|
* x0 - to
|
|
* x1 - from
|
|
* x2 - n
|
|
* Returns:
|
|
* x0 - bytes not copied
|
|
*/
|
|
.macro ldrb1 ptr, regB, val
|
|
ldrb \ptr, [\regB], \val
|
|
.endm
|
|
|
|
.macro strb1 ptr, regB, val
|
|
uao_user_alternative 9998f, strb, sttrb, \ptr, \regB, \val
|
|
.endm
|
|
|
|
.macro ldrh1 ptr, regB, val
|
|
ldrh \ptr, [\regB], \val
|
|
.endm
|
|
|
|
.macro strh1 ptr, regB, val
|
|
uao_user_alternative 9998f, strh, sttrh, \ptr, \regB, \val
|
|
.endm
|
|
|
|
.macro ldr1 ptr, regB, val
|
|
ldr \ptr, [\regB], \val
|
|
.endm
|
|
|
|
.macro str1 ptr, regB, val
|
|
uao_user_alternative 9998f, str, sttr, \ptr, \regB, \val
|
|
.endm
|
|
|
|
.macro ldp1 ptr, regB, regC, val
|
|
ldp \ptr, \regB, [\regC], \val
|
|
.endm
|
|
|
|
.macro stp1 ptr, regB, regC, val
|
|
uao_stp 9998f, \ptr, \regB, \regC, \val
|
|
.endm
|
|
|
|
end .req x5
|
|
ENTRY(__arch_copy_to_user)
|
|
uaccess_enable_not_uao x3, x4, x5
|
|
add end, x0, x2
|
|
#include "copy_template.S"
|
|
uaccess_disable_not_uao x3, x4
|
|
mov x0, #0
|
|
ret
|
|
ENDPROC(__arch_copy_to_user)
|
|
EXPORT_SYMBOL(__arch_copy_to_user)
|
|
|
|
.section .fixup,"ax"
|
|
.align 2
|
|
9998: sub x0, end, dst // bytes not copied
|
|
ret
|
|
.previous
|