Commit 08ee3a00 authored by Thomas Bogendoerfer's avatar Thomas Bogendoerfer

MIPS: uaccess: Added __get/__put_kernel_nofault

Added __get/__put_kernel_nofault as preparation for removing
get/set_fs.
Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 9a91dd50
...@@ -355,6 +355,18 @@ do { \ ...@@ -355,6 +355,18 @@ do { \
(val) = __gu_tmp.t; \ (val) = __gu_tmp.t; \
} }
#define HAVE_GET_KERNEL_NOFAULT
#define __get_kernel_nofault(dst, src, type, err_label) \
do { \
int __gu_err; \
\
__get_kernel_common(*((type *)(dst)), sizeof(type), \
(__force type *)(src)); \
if (unlikely(__gu_err)) \
goto err_label; \
} while (0)
#ifndef CONFIG_EVA #ifndef CONFIG_EVA
#define __put_kernel_common(ptr, size) __put_user_common(ptr, size) #define __put_kernel_common(ptr, size) __put_user_common(ptr, size)
#else #else
...@@ -483,6 +495,18 @@ do { \ ...@@ -483,6 +495,18 @@ do { \
extern void __put_user_unknown(void); extern void __put_user_unknown(void);
#define __put_kernel_nofault(dst, src, type, err_label) \
do { \
type __pu_val; \
int __pu_err = 0; \
\
__pu_val = *(__force type *)(src); \
__put_kernel_common(((type *)(dst)), sizeof(type)); \
if (unlikely(__pu_err)) \
goto err_label; \
} while (0)
/* /*
* We're generating jump to subroutines which will be outside the range of * We're generating jump to subroutines which will be outside the range of
* jump instructions * jump instructions
......
...@@ -22,6 +22,10 @@ else ...@@ -22,6 +22,10 @@ else
obj-y += uasm-mips.o obj-y += uasm-mips.o
endif endif
ifndef CONFIG_EVA
obj-y += maccess.o
endif
obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
obj-$(CONFIG_64BIT) += ioremap64.o pgtable-64.o obj-$(CONFIG_64BIT) += ioremap64.o pgtable-64.o
obj-$(CONFIG_HIGHMEM) += highmem.o obj-$(CONFIG_HIGHMEM) += highmem.o
......
// SPDX-License-Identifier: GPL-2.0-only
#include <linux/uaccess.h>
#include <linux/kernel.h>
bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size)
{
/* highest bit set means kernel space */
return (unsigned long)unsafe_src >> (BITS_PER_LONG - 1);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment