Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 736706be authored by Linus Torvalds's avatar Linus Torvalds
Browse files

get rid of legacy 'get_ds()' function



Every in-kernel use of this function defined it to KERNEL_DS (either as
an actual define, or as an inline function).  It's an entirely
historical artifact, and long long long ago used to actually read the
segment selector valueof '%ds' on x86.

Which in the kernel is always KERNEL_DS.

Inspired by a patch from Jann Horn that just did this for a very small
subset of users (the ones in fs/), along with Al who suggested a script.
I then just took it to the logical extreme and removed all the remaining
gunk.

Roughly scripted with

   git grep -l '(get_ds())' -- :^tools/ | xargs sed -i 's/(get_ds())/(KERNEL_DS)/'
   git grep -lw 'get_ds' -- :^tools/ | xargs sed -i '/^#define get_ds()/d'

plus manual fixups to remove a few unusual usage patterns, the couple of
inline function cases and to fix up a comment that had become stale.

The 'get_ds()' function remains in an x86 kvm selftest, since in user
space it actually does something relevant.

Inspired-by: default avatarJann Horn <jannh@google.com>
Inspired-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 84c4e1f8
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@
#define USER_DS		((mm_segment_t) { -0x40000000000UL })

#define get_fs()  (current_thread_info()->addr_limit)
#define get_ds()  (KERNEL_DS)
#define set_fs(x) (current_thread_info()->addr_limit = (x))

#define segment_eq(a, b)	((a).seg == (b).seg)
+0 −1
Original line number Diff line number Diff line
@@ -59,7 +59,6 @@ extern int __put_user_bad(void);
 * Note that this is actually 0x1,0000,0000
 */
#define KERNEL_DS	0x00000000
#define get_ds()	(KERNEL_DS)

#ifdef CONFIG_MMU

+1 −1
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ void __show_regs(struct pt_regs *regs)
		if ((domain & domain_mask(DOMAIN_USER)) ==
		    domain_val(DOMAIN_USER, DOMAIN_NOACCESS))
			segment = "none";
		else if (fs == get_ds())
		else if (fs == KERNEL_DS)
			segment = "kernel";
		else
			segment = "user";
+1 −2
Original line number Diff line number Diff line
@@ -113,8 +113,7 @@ ENTRY(privcmd_call)

	/*
	 * Disable userspace access from kernel. This is fine to do it
	 * unconditionally as no set_fs(KERNEL_DS)/set_fs(get_ds()) is
	 * called before.
	 * unconditionally as no set_fs(KERNEL_DS) is called before.
	 */
	uaccess_disable r4

+0 −1
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@
#include <asm/memory.h>
#include <asm/extable.h>

#define get_ds()	(KERNEL_DS)
#define get_fs()	(current_thread_info()->addr_limit)

static inline void set_fs(mm_segment_t fs)
Loading