Commit 3a24a608 authored by Brian Gerst's avatar Brian Gerst Committed by Borislav Petkov
Browse files

x86/32: Remove lazy GS macros

parent 9554e908
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ do { \
#ifdef CONFIG_X86_32
#define deactivate_mm(tsk, mm)			\
do {						\
	lazy_load_gs(0);			\
	loadsegment(gs, 0);			\
} while (0)
#else
#define deactivate_mm(tsk, mm)			\
+0 −5
Original line number Diff line number Diff line
@@ -354,11 +354,6 @@ static inline void __loadsegment_fs(unsigned short value)
 * x86-32 user GS accessors.  This is ugly and could do with some cleaning up.
 */
#ifdef CONFIG_X86_32
# define get_user_gs(regs)		(u16)({ unsigned long v; savesegment(gs, v); v; })
# define set_user_gs(regs, v)		loadsegment(gs, (unsigned long)(v))
# define task_user_gs(tsk)		((tsk)->thread.gs)
# define lazy_save_gs(v)		savesegment(gs, (v))
# define lazy_load_gs(v)		loadsegment(gs, (v))
# define load_gs_index(v)		loadsegment(gs, (v))
#endif	/* X86_32 */

+1 −4
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg,
	savesegment(ds, p->thread.ds);
#else
	p->thread.sp0 = (unsigned long) (childregs + 1);
	savesegment(gs, p->thread.gs);
	/*
	 * Clear all status flags including IF and set fixed bit. 64bit
	 * does not have this initialization as the frame does not contain
@@ -191,10 +192,6 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg,
	if (sp)
		childregs->sp = sp;

#ifdef CONFIG_X86_32
	task_user_gs(p) = get_user_gs(current_pt_regs());
#endif

	if (unlikely(p->flags & PF_IO_WORKER)) {
		/*
		 * An IO thread is a user space thread, but it doesn't
+4 −7
Original line number Diff line number Diff line
@@ -63,9 +63,6 @@ void __show_regs(struct pt_regs *regs, enum show_regs_mode mode,
	unsigned long d0, d1, d2, d3, d6, d7;
	unsigned short gs;

	if (user_mode(regs))
		gs = get_user_gs(regs);
	else
	savesegment(gs, gs);

	show_ip(regs, log_lvl);
@@ -114,7 +111,7 @@ void release_thread(struct task_struct *dead_task)
void
start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
{
	set_user_gs(regs, 0);
	loadsegment(gs, 0);
	regs->fs		= 0;
	regs->ds		= __USER_DS;
	regs->es		= __USER_DS;
@@ -177,7 +174,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
	 * used %fs or %gs (it does not today), or if the kernel is
	 * running inside of a hypervisor layer.
	 */
	lazy_save_gs(prev->gs);
	savesegment(gs, prev->gs);

	/*
	 * Load the per-thread Thread-Local Storage descriptor.
@@ -208,7 +205,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
	 * Restore %gs if needed (which is common)
	 */
	if (prev->gs | next->gs)
		lazy_load_gs(next->gs);
		loadsegment(gs, next->gs);

	this_cpu_write(current_task, next_p);

+3 −3
Original line number Diff line number Diff line
@@ -170,9 +170,9 @@ static u16 get_segment_reg(struct task_struct *task, unsigned long offset)
		retval = *pt_regs_access(task_pt_regs(task), offset);
	else {
		if (task == current)
			retval = get_user_gs(task_pt_regs(task));
			savesegment(gs, retval);
		else
			retval = task_user_gs(task);
			retval = task->thread.gs;
	}
	return retval;
}
@@ -210,7 +210,7 @@ static int set_segment_reg(struct task_struct *task,
		break;

	case offsetof(struct user_regs_struct, gs):
		task_user_gs(task) = value;
		task->thread.gs = value;
	}

	return 0;
Loading