MIPS: uaccess: Added __get/__put_kernel_nofault

Added __get/__put_kernel_nofault as preparation for removing
get/set_fs.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Thomas Bogendoerfer 2021-04-01 14:56:35 +02:00
parent 9a91dd501c
commit 08ee3a009f
3 changed files with 38 additions and 0 deletions

View File

@ -355,6 +355,18 @@ do { \
(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
#define __put_kernel_common(ptr, size) __put_user_common(ptr, size)
#else
@ -483,6 +495,18 @@ do { \
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
* jump instructions

View File

@ -22,6 +22,10 @@ else
obj-y += uasm-mips.o
endif
ifndef CONFIG_EVA
obj-y += maccess.o
endif
obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
obj-$(CONFIG_64BIT) += ioremap64.o pgtable-64.o
obj-$(CONFIG_HIGHMEM) += highmem.o

10
arch/mips/mm/maccess.c Normal file
View File

@ -0,0 +1,10 @@
// 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);
}