1caab277bSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 20aea86a2SCatalin Marinas/* 30aea86a2SCatalin Marinas * Based on arch/arm/lib/clear_user.S 40aea86a2SCatalin Marinas * 50aea86a2SCatalin Marinas * Copyright (C) 2012 ARM Ltd. 60aea86a2SCatalin Marinas */ 70aea86a2SCatalin Marinas#include <linux/linkage.h> 8338d4f49SJames Morse 9b4b8664dSAl Viro#include <asm/asm-uaccess.h> 1056c08ec5SMark Rutland#include <asm/assembler.h> 110aea86a2SCatalin Marinas 120aea86a2SCatalin Marinas .text 130aea86a2SCatalin Marinas 14f71c2ffcSWill Deacon/* Prototype: int __arch_clear_user(void *addr, size_t sz) 150aea86a2SCatalin Marinas * Purpose : clear some user memory 160aea86a2SCatalin Marinas * Params : addr - user memory address to clear 170aea86a2SCatalin Marinas * : sz - number of bytes to clear 180aea86a2SCatalin Marinas * Returns : number of bytes NOT cleared 190aea86a2SCatalin Marinas * 200aea86a2SCatalin Marinas * Alignment fixed up by hardware. 210aea86a2SCatalin Marinas */ 22f71c2ffcSWill DeaconENTRY(__arch_clear_user) 2327a921e7SWill Deacon uaccess_enable_not_uao x2, x3, x4 240aea86a2SCatalin Marinas mov x2, x1 // save the size for fixup return 250aea86a2SCatalin Marinas subs x1, x1, #8 260aea86a2SCatalin Marinas b.mi 2f 270aea86a2SCatalin Marinas1: 2857f4959bSJames Morseuao_user_alternative 9f, str, sttr, xzr, x0, 8 290aea86a2SCatalin Marinas subs x1, x1, #8 300aea86a2SCatalin Marinas b.pl 1b 310aea86a2SCatalin Marinas2: adds x1, x1, #4 320aea86a2SCatalin Marinas b.mi 3f 3357f4959bSJames Morseuao_user_alternative 9f, str, sttr, wzr, x0, 4 340aea86a2SCatalin Marinas sub x1, x1, #4 350aea86a2SCatalin Marinas3: adds x1, x1, #2 360aea86a2SCatalin Marinas b.mi 4f 3757f4959bSJames Morseuao_user_alternative 9f, strh, sttrh, wzr, x0, 2 380aea86a2SCatalin Marinas sub x1, x1, #2 390aea86a2SCatalin Marinas4: adds x1, x1, #1 400aea86a2SCatalin Marinas b.mi 5f 4157f4959bSJames Morseuao_user_alternative 9f, strb, sttrb, wzr, x0, 0 420aea86a2SCatalin Marinas5: mov x0, #0 436b88a32cSCatalin Marinas uaccess_disable_not_uao x2, x3 440aea86a2SCatalin Marinas ret 45f71c2ffcSWill DeaconENDPROC(__arch_clear_user) 4656c08ec5SMark RutlandEXPORT_SYMBOL(__arch_clear_user) 470aea86a2SCatalin Marinas 480aea86a2SCatalin Marinas .section .fixup,"ax" 490aea86a2SCatalin Marinas .align 2 500aea86a2SCatalin Marinas9: mov x0, x2 // return the original size 510aea86a2SCatalin Marinas ret 520aea86a2SCatalin Marinas .previous 53