uaccess.h (819771cc289226e392d5d45f1d162b47ace4eff6) | uaccess.h (2e77a62cb3a6d2eb9dd875516411bcd131dd04e7) |
---|---|
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Based on arch/arm/include/asm/uaccess.h 4 * 5 * Copyright (C) 2012 ARM Ltd. 6 */ 7#ifndef __ASM_UACCESS_H 8#define __ASM_UACCESS_H --- 241 unchanged lines hidden (view full) --- 250 * 251 * The "__xxx_error" versions set the third argument to -EFAULT if an error 252 * occurs, and leave it unchanged on success. 253 */ 254#define __get_mem_asm(load, reg, x, addr, err) \ 255 asm volatile( \ 256 "1: " load " " reg "1, [%2]\n" \ 257 "2:\n" \ | 1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Based on arch/arm/include/asm/uaccess.h 4 * 5 * Copyright (C) 2012 ARM Ltd. 6 */ 7#ifndef __ASM_UACCESS_H 8#define __ASM_UACCESS_H --- 241 unchanged lines hidden (view full) --- 250 * 251 * The "__xxx_error" versions set the third argument to -EFAULT if an error 252 * occurs, and leave it unchanged on success. 253 */ 254#define __get_mem_asm(load, reg, x, addr, err) \ 255 asm volatile( \ 256 "1: " load " " reg "1, [%2]\n" \ 257 "2:\n" \ |
258 " .section .fixup, \"ax\"\n" \ 259 " .align 2\n" \ 260 "3: mov %w0, %3\n" \ 261 " mov %1, #0\n" \ 262 " b 2b\n" \ 263 " .previous\n" \ 264 _ASM_EXTABLE(1b, 3b) \ | 258 _ASM_EXTABLE_UACCESS_ERR_ZERO(1b, 2b, %w0, %w1) \ |
265 : "+r" (err), "=&r" (x) \ | 259 : "+r" (err), "=&r" (x) \ |
266 : "r" (addr), "i" (-EFAULT)) | 260 : "r" (addr)) |
267 268#define __raw_get_mem(ldr, x, ptr, err) \ 269do { \ 270 unsigned long __gu_val; \ 271 switch (sizeof(*(ptr))) { \ 272 case 1: \ 273 __get_mem_asm(ldr "b", "%w", __gu_val, (ptr), (err)); \ 274 break; \ --- 52 unchanged lines hidden (view full) --- 327 if (unlikely(__gkn_err)) \ 328 goto err_label; \ 329} while (0) 330 331#define __put_mem_asm(store, reg, x, addr, err) \ 332 asm volatile( \ 333 "1: " store " " reg "1, [%2]\n" \ 334 "2:\n" \ | 261 262#define __raw_get_mem(ldr, x, ptr, err) \ 263do { \ 264 unsigned long __gu_val; \ 265 switch (sizeof(*(ptr))) { \ 266 case 1: \ 267 __get_mem_asm(ldr "b", "%w", __gu_val, (ptr), (err)); \ 268 break; \ --- 52 unchanged lines hidden (view full) --- 321 if (unlikely(__gkn_err)) \ 322 goto err_label; \ 323} while (0) 324 325#define __put_mem_asm(store, reg, x, addr, err) \ 326 asm volatile( \ 327 "1: " store " " reg "1, [%2]\n" \ 328 "2:\n" \ |
335 " .section .fixup,\"ax\"\n" \ 336 " .align 2\n" \ 337 "3: mov %w0, %3\n" \ 338 " b 2b\n" \ 339 " .previous\n" \ 340 _ASM_EXTABLE(1b, 3b) \ | 329 _ASM_EXTABLE_UACCESS_ERR(1b, 2b, %w0) \ |
341 : "+r" (err) \ | 330 : "+r" (err) \ |
342 : "r" (x), "r" (addr), "i" (-EFAULT)) | 331 : "r" (x), "r" (addr)) |
343 344#define __raw_put_mem(str, x, ptr, err) \ 345do { \ 346 __typeof__(*(ptr)) __pu_val = (x); \ 347 switch (sizeof(*(ptr))) { \ 348 case 1: \ 349 __put_mem_asm(str "b", "%w", __pu_val, (ptr), (err)); \ 350 break; \ --- 109 unchanged lines hidden --- | 332 333#define __raw_put_mem(str, x, ptr, err) \ 334do { \ 335 __typeof__(*(ptr)) __pu_val = (x); \ 336 switch (sizeof(*(ptr))) { \ 337 case 1: \ 338 __put_mem_asm(str "b", "%w", __pu_val, (ptr), (err)); \ 339 break; \ --- 109 unchanged lines hidden --- |