diff options
Diffstat (limited to 'arch/x86/kernel/process_64.c')
| -rw-r--r-- | arch/x86/kernel/process_64.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index eeeb34f85c25..c75466232016 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
| @@ -69,9 +69,8 @@ void __show_regs(struct pt_regs *regs, int all) | |||
| 69 | unsigned int fsindex, gsindex; | 69 | unsigned int fsindex, gsindex; |
| 70 | unsigned int ds, cs, es; | 70 | unsigned int ds, cs, es; |
| 71 | 71 | ||
| 72 | printk(KERN_DEFAULT "RIP: %04lx:%pS\n", regs->cs, (void *)regs->ip); | 72 | show_iret_regs(regs); |
| 73 | printk(KERN_DEFAULT "RSP: %04lx:%016lx EFLAGS: %08lx", regs->ss, | 73 | |
| 74 | regs->sp, regs->flags); | ||
| 75 | if (regs->orig_ax != -1) | 74 | if (regs->orig_ax != -1) |
| 76 | pr_cont(" ORIG_RAX: %016lx\n", regs->orig_ax); | 75 | pr_cont(" ORIG_RAX: %016lx\n", regs->orig_ax); |
| 77 | else | 76 | else |
| @@ -88,6 +87,9 @@ void __show_regs(struct pt_regs *regs, int all) | |||
| 88 | printk(KERN_DEFAULT "R13: %016lx R14: %016lx R15: %016lx\n", | 87 | printk(KERN_DEFAULT "R13: %016lx R14: %016lx R15: %016lx\n", |
| 89 | regs->r13, regs->r14, regs->r15); | 88 | regs->r13, regs->r14, regs->r15); |
| 90 | 89 | ||
| 90 | if (!all) | ||
| 91 | return; | ||
| 92 | |||
| 91 | asm("movl %%ds,%0" : "=r" (ds)); | 93 | asm("movl %%ds,%0" : "=r" (ds)); |
| 92 | asm("movl %%cs,%0" : "=r" (cs)); | 94 | asm("movl %%cs,%0" : "=r" (cs)); |
| 93 | asm("movl %%es,%0" : "=r" (es)); | 95 | asm("movl %%es,%0" : "=r" (es)); |
| @@ -98,9 +100,6 @@ void __show_regs(struct pt_regs *regs, int all) | |||
| 98 | rdmsrl(MSR_GS_BASE, gs); | 100 | rdmsrl(MSR_GS_BASE, gs); |
| 99 | rdmsrl(MSR_KERNEL_GS_BASE, shadowgs); | 101 | rdmsrl(MSR_KERNEL_GS_BASE, shadowgs); |
| 100 | 102 | ||
| 101 | if (!all) | ||
| 102 | return; | ||
| 103 | |||
| 104 | cr0 = read_cr0(); | 103 | cr0 = read_cr0(); |
| 105 | cr2 = read_cr2(); | 104 | cr2 = read_cr2(); |
| 106 | cr3 = __read_cr3(); | 105 | cr3 = __read_cr3(); |
| @@ -400,7 +399,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | |||
| 400 | struct fpu *prev_fpu = &prev->fpu; | 399 | struct fpu *prev_fpu = &prev->fpu; |
| 401 | struct fpu *next_fpu = &next->fpu; | 400 | struct fpu *next_fpu = &next->fpu; |
| 402 | int cpu = smp_processor_id(); | 401 | int cpu = smp_processor_id(); |
| 403 | struct tss_struct *tss = &per_cpu(cpu_tss, cpu); | 402 | struct tss_struct *tss = &per_cpu(cpu_tss_rw, cpu); |
| 404 | 403 | ||
| 405 | WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ENTRY) && | 404 | WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ENTRY) && |
| 406 | this_cpu_read(irq_count) != -1); | 405 | this_cpu_read(irq_count) != -1); |
| @@ -462,6 +461,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | |||
| 462 | * Switch the PDA and FPU contexts. | 461 | * Switch the PDA and FPU contexts. |
| 463 | */ | 462 | */ |
| 464 | this_cpu_write(current_task, next_p); | 463 | this_cpu_write(current_task, next_p); |
| 464 | this_cpu_write(cpu_current_top_of_stack, task_top_of_stack(next_p)); | ||
| 465 | 465 | ||
| 466 | /* Reload sp0. */ | 466 | /* Reload sp0. */ |
| 467 | update_sp0(next_p); | 467 | update_sp0(next_p); |
