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

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
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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
+4 −0
Original line number Diff line number Diff line
@@ -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

arch/mips/mm/maccess.c

0 → 100644
+10 −0
Original line number Diff line number Diff line
// 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);
}