uaccess: remove segment_eq
authorChristoph Hellwig <hch@lst.de>
Wed, 12 Aug 2020 01:33:44 +0000 (18:33 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 12 Aug 2020 17:57:58 +0000 (10:57 -0700)
segment_eq is only used to implement uaccess_kernel.  Just open code
uaccess_kernel in the arch uaccess headers and remove one layer of
indirection.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Acked-by: Greentime Hu <green.hu@gmail.com>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Nick Hu <nickhu@andestech.com>
Cc: Vincent Chen <deanbo422@gmail.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Link: http://lkml.kernel.org/r/20200710135706.537715-5-hch@lst.de
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
24 files changed:
arch/alpha/include/asm/uaccess.h
arch/arc/include/asm/segment.h
arch/arm/include/asm/uaccess.h
arch/arm64/include/asm/uaccess.h
arch/csky/include/asm/segment.h
arch/h8300/include/asm/segment.h
arch/ia64/include/asm/uaccess.h
arch/m68k/include/asm/segment.h
arch/microblaze/include/asm/uaccess.h
arch/mips/include/asm/uaccess.h
arch/nds32/include/asm/uaccess.h
arch/nios2/include/asm/uaccess.h
arch/openrisc/include/asm/uaccess.h
arch/parisc/include/asm/uaccess.h
arch/powerpc/include/asm/uaccess.h
arch/riscv/include/asm/uaccess.h
arch/s390/include/asm/uaccess.h
arch/sh/include/asm/segment.h
arch/sparc/include/asm/uaccess_32.h
arch/sparc/include/asm/uaccess_64.h
arch/x86/include/asm/uaccess.h
arch/xtensa/include/asm/uaccess.h
include/asm-generic/uaccess.h
include/linux/uaccess.h

index 1fe2b56cb861fe4150785699ded8f29fc8132baf..1b6f25efa247f00034dd3637ccadfdd86140034f 100644 (file)
@@ -20,7 +20,7 @@
 #define get_fs()  (current_thread_info()->addr_limit)
 #define set_fs(x) (current_thread_info()->addr_limit = (x))
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel()       (get_fs().seg == KERNEL_DS.seg)
 
 /*
  * Is a address valid? This does a straightforward calculation rather
index 6a2a5be5026de7d0fbcbbe7e6c6ce599ec2a5f44..871f8ab11bfd02effaca129c68e4147f36d18e19 100644 (file)
@@ -14,8 +14,7 @@ typedef unsigned long mm_segment_t;
 
 #define KERNEL_DS              MAKE_MM_SEG(0)
 #define USER_DS                        MAKE_MM_SEG(TASK_SIZE)
-
-#define segment_eq(a, b)       ((a) == (b))
+#define uaccess_kernel()       (get_fs() == KERNEL_DS)
 
 #endif /* __ASSEMBLY__ */
 #endif /* __ASMARC_SEGMENT_H */
index b5fdd30252f845bd36bdc4b3fbced6711d7194b0..a13d90206472263f2a782f213094149f387c92be 100644 (file)
@@ -76,7 +76,7 @@ static inline void set_fs(mm_segment_t fs)
        modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
 }
 
-#define segment_eq(a, b)       ((a) == (b))
+#define uaccess_kernel()       (get_fs() == KERNEL_DS)
 
 /*
  * We use 33-bit arithmetic here.  Success returns zero, failure returns
@@ -267,7 +267,7 @@ extern int __put_user_8(void *, unsigned long long);
  */
 #define USER_DS                        KERNEL_DS
 
-#define segment_eq(a, b)               (1)
+#define uaccess_kernel()       (true)
 #define __addr_ok(addr)                ((void)(addr), 1)
 #define __range_ok(addr, size) ((void)(addr), 0)
 #define get_fs()               (KERNEL_DS)
index 8d7c466f809b9dc3fdb9d1b24f7dea6ebcff2293..991dd5f031e4613cdfceab311d37aec32ee4d60a 100644 (file)
@@ -50,7 +50,7 @@ static inline void set_fs(mm_segment_t fs)
                                CONFIG_ARM64_UAO));
 }
 
-#define segment_eq(a, b)       ((a) == (b))
+#define uaccess_kernel()       (get_fs() == KERNEL_DS)
 
 /*
  * Test whether a block of memory is a valid user space address.
index db2640d5f57591f32adb9b9508daf2233358582c..79ede9b1a6467f7d56fedc63803db1248d157714 100644 (file)
@@ -13,6 +13,6 @@ typedef struct {
 #define USER_DS                        ((mm_segment_t) { 0x80000000UL })
 #define get_fs()               (current_thread_info()->addr_limit)
 #define set_fs(x)              (current_thread_info()->addr_limit = (x))
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel()       (get_fs().seg == KERNEL_DS.seg)
 
 #endif /* __ASM_CSKY_SEGMENT_H */
index a407978f9f9fb8219f64f4561fbe80cfc91678e3..37950725d9b9c8d8d89a8d1a81c01c37e3609a37 100644 (file)
@@ -33,7 +33,7 @@ static inline mm_segment_t get_fs(void)
        return USER_DS;
 }
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel()       (get_fs().seg == KERNEL_DS.seg)
 
 #endif /* __ASSEMBLY__ */
 
index 8aa473a4b0f4ef903ecd41be4a83754a5ea70b79..179243c3dfc702419d215bfe6df52fe3b866f37e 100644 (file)
@@ -50,7 +50,7 @@
 #define get_fs()  (current_thread_info()->addr_limit)
 #define set_fs(x) (current_thread_info()->addr_limit = (x))
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel()       (get_fs().seg == KERNEL_DS.seg)
 
 /*
  * When accessing user memory, we need to make sure the entire area really is in
index c6686559e9b742f5df781efac658a9c6f57553a3..2b5e68a71ef78e9f081a051b16d09d2a339d994c 100644 (file)
@@ -52,7 +52,7 @@ static inline void set_fs(mm_segment_t val)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
 #endif
 
-#define segment_eq(a, b) ((a).seg == (b).seg)
+#define uaccess_kernel()       (get_fs().seg == KERNEL_DS.seg)
 
 #endif /* __ASSEMBLY__ */
 
index 6723c56ec3783bb60f3cc9c36729b10264730789..304b04ffea2faf4104cab64cfba5036ad010abf3 100644 (file)
@@ -41,7 +41,7 @@
 # define get_fs()      (current_thread_info()->addr_limit)
 # define set_fs(val)   (current_thread_info()->addr_limit = (val))
 
-# define segment_eq(a, b)      ((a).seg == (b).seg)
+# define uaccess_kernel()      (get_fs().seg == KERNEL_DS.seg)
 
 #ifndef CONFIG_MMU
 
index 62b298c50905f67cdcd2221c5d28ae179a195a7d..61fc01f177a64bfe6f5d177950ef369d900c2461 100644 (file)
@@ -72,7 +72,7 @@ extern u64 __ua_limit;
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel()       (get_fs().seg == KERNEL_DS.seg)
 
 /*
  * eva_kernel_access() - determine whether kernel memory access on an EVA system
index 3a9219f53ee0d896c47d3aee441e750ebf85b412..010ba5f1d7dd6b45445e51faef8a1b0809d2f3a6 100644 (file)
@@ -44,7 +44,7 @@ static inline void set_fs(mm_segment_t fs)
        current_thread_info()->addr_limit = fs;
 }
 
-#define segment_eq(a, b)       ((a) == (b))
+#define uaccess_kernel()       (get_fs() == KERNEL_DS)
 
 #define __range_ok(addr, size) (size <= get_fs() && addr <= (get_fs() -size))
 
index e83f831a76f93926e5ac5717b259d3b5777dae97..a741abbed6fbf5ae8738730e4abeebe6c1627cb0 100644 (file)
@@ -30,7 +30,7 @@
 #define get_fs()               (current_thread_info()->addr_limit)
 #define set_fs(seg)            (current_thread_info()->addr_limit = (seg))
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 
 #define __access_ok(addr, len)                 \
        (((signed long)(((long)get_fs().seg) &  \
index 17c24f14615fb5b7f1c9d56d09670c14dd22ad0b..48b691530d3ed4275aeb5cd62cdf04fa8a87ed25 100644 (file)
@@ -43,7 +43,7 @@
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
 
-#define segment_eq(a, b)       ((a) == (b))
+#define uaccess_kernel()       (get_fs() == KERNEL_DS)
 
 /* Ensure that the range from addr to addr+size is all within the process'
  * address space
index ebbb9ffe038c76728de555ca8a3d2b0ec86020a2..ed2cd4fb479b0cc991c23a9a48fbcd6fc3485886 100644 (file)
@@ -14,7 +14,7 @@
 #define KERNEL_DS      ((mm_segment_t){0})
 #define USER_DS        ((mm_segment_t){1})
 
-#define segment_eq(a, b) ((a).seg == (b).seg)
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
index 64c04ab09112369a8206df75acbdefd5b76463b6..00699903f1efca52fa06ca3a1dad35cbb0feae58 100644 (file)
@@ -38,8 +38,7 @@ static inline void set_fs(mm_segment_t fs)
        set_thread_flag(TIF_FSCHECK);
 }
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
-
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 #define user_addr_max()        (get_fs().seg)
 
 #ifdef __powerpc64__
index 22de922d6ecb2f9783cb3c00f1be7998d4e3ad18..f56c66b3f5fe21e7610aedcc2547ad1d53617276 100644 (file)
@@ -64,11 +64,9 @@ static inline void set_fs(mm_segment_t fs)
        current_thread_info()->addr_limit = fs;
 }
 
-#define segment_eq(a, b) ((a).seg == (b).seg)
-
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 #define user_addr_max()        (get_fs().seg)
 
-
 /**
  * access_ok: - Checks if a user space pointer is valid
  * @addr: User space pointer to start of block to check
index 324438889fe1686361eb380d526f93484e8b8b23..f09444d6aeab3057f5d5ccd88998ceea7fff83a5 100644 (file)
@@ -32,7 +32,7 @@
 #define USER_DS_SACF   (3)
 
 #define get_fs()        (current->thread.mm_segment)
-#define segment_eq(a,b) (((a) & 2) == ((b) & 2))
+#define uaccess_kernel() ((get_fs() & 2) == KERNEL_DS)
 
 void set_fs(mm_segment_t fs);
 
index 33d1d28057cbfb37aa25896a88cbfa98596b09b9..02e54a3335d68f1d6ea0e1f832ce42d7f8cb71ce 100644 (file)
@@ -24,8 +24,7 @@ typedef struct {
 #define USER_DS                KERNEL_DS
 #endif
 
-#define segment_eq(a, b) ((a).seg == (b).seg)
-
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 
 #define get_fs()       (current_thread_info()->addr_limit)
 #define set_fs(x)      (current_thread_info()->addr_limit = (x))
index d6d8413eca835aa325a892ad45ce792b9fedf014..0a2d3ebc4bb86d349bf5455bc05d7868f6da495e 100644 (file)
@@ -28,7 +28,7 @@
 #define get_fs()       (current->thread.current_ds)
 #define set_fs(val)    ((current->thread.current_ds) = (val))
 
-#define segment_eq(a, b) ((a).seg == (b).seg)
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 
 /* We have there a nice not-mapped page at PAGE_OFFSET - PAGE_SIZE, so that this test
  * can be fairly lightweight.
index bf9d330073b2352d571dde9093b60fd75ea06bea..698cf69f74e9984d54bca056bcd6470df7b88c1e 100644 (file)
@@ -32,7 +32,7 @@
 
 #define get_fs() ((mm_segment_t){(current_thread_info()->current_ds)})
 
-#define segment_eq(a, b)  ((a).seg == (b).seg)
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 
 #define set_fs(val)                                                            \
 do {                                                                           \
index 2f3e8f2a958f64d065cee6913f4dbc2c8bc59b67..ecefaffd15d4c804980dd3a00615994b2667eea6 100644 (file)
@@ -33,7 +33,7 @@ static inline void set_fs(mm_segment_t fs)
        set_thread_flag(TIF_FSCHECK);
 }
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 #define user_addr_max() (current->thread.addr_limit.seg)
 
 /*
index e57f0d0a88d8bafcf95d3d2b34f8295cb0b39e92..b9758119feca19bf267da7f27d045c7e81e3d834 100644 (file)
@@ -35,7 +35,7 @@
 #define get_fs()       (current->thread.current_ds)
 #define set_fs(val)    (current->thread.current_ds = (val))
 
-#define segment_eq(a, b)       ((a).seg == (b).seg)
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 
 #define __kernel_ok (uaccess_kernel())
 #define __user_ok(addr, size) \
index e935318804f8aedb6319c4f63f89e5bf8a46c5b0..ba68ee4dabfaa75adcb5907dca553c27caf305c5 100644 (file)
@@ -86,8 +86,8 @@ static inline void set_fs(mm_segment_t fs)
 }
 #endif
 
-#ifndef segment_eq
-#define segment_eq(a, b) ((a).seg == (b).seg)
+#ifndef uaccess_kernel
+#define uaccess_kernel() (get_fs().seg == KERNEL_DS.seg)
 #endif
 
 #define access_ok(addr, size) __access_ok((unsigned long)(addr),(size))
index 0a76ddc07d59704b1c24ac5ef78bc2c5b05ba50b..5c62d0c6f15b16718cfb9ddf8b571231e57eb45f 100644 (file)
@@ -6,8 +6,6 @@
 #include <linux/sched.h>
 #include <linux/thread_info.h>
 
-#define uaccess_kernel() segment_eq(get_fs(), KERNEL_DS)
-
 #include <asm/uaccess.h>
 
 /*