summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/checksum.h22
-rw-r--r--arch/powerpc/lib/Makefile3
-rw-r--r--arch/powerpc/lib/checksum_wrappers.c39
3 files changed, 19 insertions, 45 deletions
diff --git a/arch/powerpc/include/asm/checksum.h b/arch/powerpc/include/asm/checksum.h
index 4b573a3b7e17..52921ea2494a 100644
--- a/arch/powerpc/include/asm/checksum.h
+++ b/arch/powerpc/include/asm/checksum.h
@@ -8,6 +8,7 @@
#include <linux/bitops.h>
#include <linux/in6.h>
+#include <linux/uaccess.h>
/*
* Computes the checksum of a memory block at src, length len,
* and adds in "sum" (32-bit), while copying the block to dst.
@@ -21,11 +22,24 @@
extern __wsum csum_partial_copy_generic(const void *src, void *dst, int len);
#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER
-extern __wsum csum_and_copy_from_user(const void __user *src, void *dst,
- int len);
+static inline __wsum csum_and_copy_from_user(const void __user *src, void *dst, int len)
+{
+ scoped_user_read_access_size(src, len, efault)
+ return csum_partial_copy_generic((void __force *)src, dst, len);
+
+efault:
+ return 0;
+}
+
#define HAVE_CSUM_COPY_USER
-extern __wsum csum_and_copy_to_user(const void *src, void __user *dst,
- int len);
+static inline __wsum csum_and_copy_to_user(const void *src, void __user *dst, int len)
+{
+ scoped_user_write_access_size(dst, len, efault)
+ return csum_partial_copy_generic(src, (void __force *)dst, len);
+
+efault:
+ return 0;
+}
#define _HAVE_ARCH_CSUM_AND_COPY
#define csum_partial_copy_nocheck(src, dst, len) \
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index f14ecab674a3..bcdf387f3998 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -62,8 +62,7 @@ obj64-$(CONFIG_ALTIVEC) += vmx-helper.o
obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \
test_emulate_step_exec_instr.o
-obj-y += checksum_$(BITS).o checksum_wrappers.o \
- string_$(BITS).o
+obj-y += checksum_$(BITS).o string_$(BITS).o
obj-y += sstep.o
obj-$(CONFIG_PPC_FPU) += ldstfp.o
diff --git a/arch/powerpc/lib/checksum_wrappers.c b/arch/powerpc/lib/checksum_wrappers.c
deleted file mode 100644
index 1a14c8780278..000000000000
--- a/arch/powerpc/lib/checksum_wrappers.c
+++ /dev/null
@@ -1,39 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- *
- * Copyright (C) IBM Corporation, 2010
- *
- * Author: Anton Blanchard <anton@au.ibm.com>
- */
-#include <linux/export.h>
-#include <linux/compiler.h>
-#include <linux/types.h>
-#include <asm/checksum.h>
-#include <linux/uaccess.h>
-
-__wsum csum_and_copy_from_user(const void __user *src, void *dst,
- int len)
-{
- __wsum csum;
-
- if (unlikely(!user_read_access_begin(src, len)))
- return 0;
-
- csum = csum_partial_copy_generic((void __force *)src, dst, len);
-
- user_read_access_end();
- return csum;
-}
-
-__wsum csum_and_copy_to_user(const void *src, void __user *dst, int len)
-{
- __wsum csum;
-
- if (unlikely(!user_write_access_begin(dst, len)))
- return 0;
-
- csum = csum_partial_copy_generic(src, (void __force *)dst, len);
-
- user_write_access_end();
- return csum;
-}