diff options
Diffstat (limited to 'arch/x86/kernel/traps.c')
-rw-r--r-- | arch/x86/kernel/traps.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index f5a640ba04bc..dbfb80289928 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -292,8 +292,10 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) | |||
292 | tsk->thread.error_code = error_code; | 292 | tsk->thread.error_code = error_code; |
293 | tsk->thread.trap_no = 8; | 293 | tsk->thread.trap_no = 8; |
294 | 294 | ||
295 | /* This is always a kernel trap and never fixable (and thus must | 295 | /* |
296 | never return). */ | 296 | * This is always a kernel trap and never fixable (and thus must |
297 | * never return). | ||
298 | */ | ||
297 | for (;;) | 299 | for (;;) |
298 | die(str, regs, error_code); | 300 | die(str, regs, error_code); |
299 | } | 301 | } |
@@ -524,9 +526,11 @@ dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code) | |||
524 | } | 526 | } |
525 | 527 | ||
526 | #ifdef CONFIG_X86_64 | 528 | #ifdef CONFIG_X86_64 |
527 | /* Help handler running on IST stack to switch back to user stack | 529 | /* |
528 | for scheduling or signal handling. The actual stack switch is done in | 530 | * Help handler running on IST stack to switch back to user stack |
529 | entry.S */ | 531 | * for scheduling or signal handling. The actual stack switch is done in |
532 | * entry.S | ||
533 | */ | ||
530 | asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs) | 534 | asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs) |
531 | { | 535 | { |
532 | struct pt_regs *regs = eregs; | 536 | struct pt_regs *regs = eregs; |
@@ -536,8 +540,10 @@ asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs) | |||
536 | /* Exception from user space */ | 540 | /* Exception from user space */ |
537 | else if (user_mode(eregs)) | 541 | else if (user_mode(eregs)) |
538 | regs = task_pt_regs(current); | 542 | regs = task_pt_regs(current); |
539 | /* Exception from kernel and interrupts are enabled. Move to | 543 | /* |
540 | kernel process stack. */ | 544 | * Exception from kernel and interrupts are enabled. Move to |
545 | * kernel process stack. | ||
546 | */ | ||
541 | else if (eregs->flags & X86_EFLAGS_IF) | 547 | else if (eregs->flags & X86_EFLAGS_IF) |
542 | regs = (struct pt_regs *)(eregs->sp -= sizeof(struct pt_regs)); | 548 | regs = (struct pt_regs *)(eregs->sp -= sizeof(struct pt_regs)); |
543 | if (eregs != regs) | 549 | if (eregs != regs) |
@@ -707,8 +713,10 @@ void math_error(void __user *ip) | |||
707 | } else if (err & 0x020) { /* Precision */ | 713 | } else if (err & 0x020) { /* Precision */ |
708 | info.si_code = FPE_FLTRES; | 714 | info.si_code = FPE_FLTRES; |
709 | } else { | 715 | } else { |
710 | /* If we're using IRQ 13, or supposedly even some trap 16 | 716 | /* |
711 | implementations, it's possible we get a spurious trap... */ | 717 | * If we're using IRQ 13, or supposedly even some trap 16 |
718 | * implementations, it's possible we get a spurious trap... | ||
719 | */ | ||
712 | return; /* Spurious trap, no error */ | 720 | return; /* Spurious trap, no error */ |
713 | } | 721 | } |
714 | force_sig_info(SIGFPE, &info, task); | 722 | force_sig_info(SIGFPE, &info, task); |