Commit 76381fee authored by Vincent Hanquez's avatar Vincent Hanquez Committed by Linus Torvalds
Browse files

[PATCH] xen: x86_64: use more usermode macro



Make use of the user_mode macro where it's possible.  This is useful for Xen
because it will need only to redefine only the macro to a hypervisor call.
Signed-off-by: default avatarVincent Hanquez <vincent.hanquez@cl.cam.ac.uk>
Cc: Ian Pratt <m+Ian.Pratt@cl.cam.ac.uk>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent e9129e56
...@@ -422,7 +422,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) ...@@ -422,7 +422,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
* kernel mode. Just return without doing anything * kernel mode. Just return without doing anything
* if so. * if so.
*/ */
if ((regs->cs & 3) != 3) if (!user_mode(regs))
return 1; return 1;
if (try_to_freeze(0)) if (try_to_freeze(0))
......
...@@ -274,7 +274,7 @@ EXPORT_SYMBOL(dump_stack); ...@@ -274,7 +274,7 @@ EXPORT_SYMBOL(dump_stack);
void show_registers(struct pt_regs *regs) void show_registers(struct pt_regs *regs)
{ {
int i; int i;
int in_kernel = (regs->cs & 3) == 0; int in_kernel = !user_mode(regs);
unsigned long rsp; unsigned long rsp;
const int cpu = safe_smp_processor_id(); const int cpu = safe_smp_processor_id();
struct task_struct *cur = cpu_pda[cpu].pcurrent; struct task_struct *cur = cpu_pda[cpu].pcurrent;
...@@ -318,7 +318,7 @@ void handle_BUG(struct pt_regs *regs) ...@@ -318,7 +318,7 @@ void handle_BUG(struct pt_regs *regs)
struct bug_frame f; struct bug_frame f;
char tmp; char tmp;
if (regs->cs & 3) if (user_mode(regs))
return; return;
if (__copy_from_user(&f, (struct bug_frame *) regs->rip, if (__copy_from_user(&f, (struct bug_frame *) regs->rip,
sizeof(struct bug_frame))) sizeof(struct bug_frame)))
...@@ -437,7 +437,7 @@ static void do_trap(int trapnr, int signr, char *str, ...@@ -437,7 +437,7 @@ static void do_trap(int trapnr, int signr, char *str,
} }
#endif #endif
if ((regs->cs & 3) != 0) { if (user_mode(regs)) {
struct task_struct *tsk = current; struct task_struct *tsk = current;
if (exception_trace && unhandled_signal(tsk, signr)) if (exception_trace && unhandled_signal(tsk, signr))
...@@ -522,7 +522,7 @@ asmlinkage void do_general_protection(struct pt_regs * regs, long error_code) ...@@ -522,7 +522,7 @@ asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
} }
#endif #endif
if ((regs->cs & 3)!=0) { if (user_mode(regs)) {
struct task_struct *tsk = current; struct task_struct *tsk = current;
if (exception_trace && unhandled_signal(tsk, SIGSEGV)) if (exception_trace && unhandled_signal(tsk, SIGSEGV))
...@@ -638,7 +638,7 @@ asmlinkage struct pt_regs *sync_regs(struct pt_regs *eregs) ...@@ -638,7 +638,7 @@ asmlinkage struct pt_regs *sync_regs(struct pt_regs *eregs)
if (eregs == (struct pt_regs *)eregs->rsp) if (eregs == (struct pt_regs *)eregs->rsp)
; ;
/* Exception from user space */ /* Exception from user space */
else if (eregs->cs & 3) else if (user_mode(eregs))
regs = ((struct pt_regs *)current->thread.rsp0) - 1; regs = ((struct pt_regs *)current->thread.rsp0) - 1;
/* Exception from kernel and interrupts are enabled. Move to /* Exception from kernel and interrupts are enabled. Move to
kernel process stack. */ kernel process stack. */
...@@ -697,7 +697,7 @@ asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code) ...@@ -697,7 +697,7 @@ asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code)
* allowing programs to debug themselves without the ptrace() * allowing programs to debug themselves without the ptrace()
* interface. * interface.
*/ */
if ((regs->cs & 3) == 0) if (!user_mode(regs))
goto clear_TF_reenable; goto clear_TF_reenable;
/* /*
* Was the TF flag set by a debugger? If so, clear it now, * Was the TF flag set by a debugger? If so, clear it now,
...@@ -715,7 +715,7 @@ asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code) ...@@ -715,7 +715,7 @@ asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code)
info.si_signo = SIGTRAP; info.si_signo = SIGTRAP;
info.si_errno = 0; info.si_errno = 0;
info.si_code = TRAP_BRKPT; info.si_code = TRAP_BRKPT;
if ((regs->cs & 3) == 0) if (!user_mode(regs))
goto clear_dr7; goto clear_dr7;
info.si_addr = (void __user *)regs->rip; info.si_addr = (void __user *)regs->rip;
...@@ -756,7 +756,7 @@ asmlinkage void do_coprocessor_error(struct pt_regs *regs) ...@@ -756,7 +756,7 @@ asmlinkage void do_coprocessor_error(struct pt_regs *regs)
unsigned short cwd, swd; unsigned short cwd, swd;
conditional_sti(regs); conditional_sti(regs);
if ((regs->cs & 3) == 0 && if (!user_mode(regs) &&
kernel_math_error(regs, "kernel x87 math error")) kernel_math_error(regs, "kernel x87 math error"))
return; return;
...@@ -822,7 +822,7 @@ asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs) ...@@ -822,7 +822,7 @@ asmlinkage void do_simd_coprocessor_error(struct pt_regs *regs)
unsigned short mxcsr; unsigned short mxcsr;
conditional_sti(regs); conditional_sti(regs);
if ((regs->cs & 3) == 0 && if (!user_mode(regs) &&
kernel_math_error(regs, "kernel simd math error")) kernel_math_error(regs, "kernel simd math error"))
return; return;
......
...@@ -74,7 +74,7 @@ static noinline int is_prefetch(struct pt_regs *regs, unsigned long addr, ...@@ -74,7 +74,7 @@ static noinline int is_prefetch(struct pt_regs *regs, unsigned long addr,
instr = (unsigned char *)convert_rip_to_linear(current, regs); instr = (unsigned char *)convert_rip_to_linear(current, regs);
max_instr = instr + 15; max_instr = instr + 15;
if ((regs->cs & 3) != 0 && instr >= (unsigned char *)TASK_SIZE) if (user_mode(regs) && instr >= (unsigned char *)TASK_SIZE)
return 0; return 0;
while (scan_more && instr < max_instr) { while (scan_more && instr < max_instr) {
...@@ -106,7 +106,7 @@ static noinline int is_prefetch(struct pt_regs *regs, unsigned long addr, ...@@ -106,7 +106,7 @@ static noinline int is_prefetch(struct pt_regs *regs, unsigned long addr,
/* Could check the LDT for lm, but for now it's good /* Could check the LDT for lm, but for now it's good
enough to assume that long mode only uses well known enough to assume that long mode only uses well known
segments or kernel. */ segments or kernel. */
scan_more = ((regs->cs & 3) == 0) || (regs->cs == __USER_CS); scan_more = (!user_mode(regs)) || (regs->cs == __USER_CS);
break; break;
case 0x60: case 0x60:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment