aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386/kernel')
-rw-r--r--arch/i386/kernel/cpu/common.c2
-rw-r--r--arch/i386/kernel/process.c12
-rw-r--r--arch/i386/kernel/signal.c2
-rw-r--r--arch/i386/kernel/traps.c6
4 files changed, 10 insertions, 12 deletions
diff --git a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c
index d199e525680a..b9954248d0aa 100644
--- a/arch/i386/kernel/cpu/common.c
+++ b/arch/i386/kernel/cpu/common.c
@@ -635,7 +635,7 @@ void __init cpu_init (void)
635 635
636 /* Clear all 6 debug registers: */ 636 /* Clear all 6 debug registers: */
637 637
638#define CD(register) __asm__("movl %0,%%db" #register ::"r"(0) ); 638#define CD(register) set_debugreg(0, register)
639 639
640 CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7); 640 CD(0); CD(1); CD(2); CD(3); /* no db4 and db5 */; CD(6); CD(7);
641 641
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index 3c3f245cca53..2468ab70c386 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -633,13 +633,13 @@ struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct tas
633 * Now maybe reload the debug registers 633 * Now maybe reload the debug registers
634 */ 634 */
635 if (unlikely(next->debugreg[7])) { 635 if (unlikely(next->debugreg[7])) {
636 loaddebug(next, 0); 636 set_debugreg(current->thread.debugreg[0], 0);
637 loaddebug(next, 1); 637 set_debugreg(current->thread.debugreg[1], 1);
638 loaddebug(next, 2); 638 set_debugreg(current->thread.debugreg[2], 2);
639 loaddebug(next, 3); 639 set_debugreg(current->thread.debugreg[3], 3);
640 /* no 4 and 5 */ 640 /* no 4 and 5 */
641 loaddebug(next, 6); 641 set_debugreg(current->thread.debugreg[6], 6);
642 loaddebug(next, 7); 642 set_debugreg(current->thread.debugreg[7], 7);
643 } 643 }
644 644
645 if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr)) 645 if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr))
diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c
index 344400787c39..839d4dc88cd4 100644
--- a/arch/i386/kernel/signal.c
+++ b/arch/i386/kernel/signal.c
@@ -624,7 +624,7 @@ int fastcall do_signal(struct pt_regs *regs, sigset_t *oldset)
624 * inside the kernel. 624 * inside the kernel.
625 */ 625 */
626 if (unlikely(current->thread.debugreg[7])) { 626 if (unlikely(current->thread.debugreg[7])) {
627 loaddebug(&current->thread, 7); 627 set_debugreg(current->thread.debugreg[7], 7);
628 } 628 }
629 629
630 /* Whee! Actually deliver the signal. */ 630 /* Whee! Actually deliver the signal. */
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
index 7f729665d292..c01d7ba6d7e8 100644
--- a/arch/i386/kernel/traps.c
+++ b/arch/i386/kernel/traps.c
@@ -685,7 +685,7 @@ fastcall void do_debug(struct pt_regs * regs, long error_code)
685 unsigned int condition; 685 unsigned int condition;
686 struct task_struct *tsk = current; 686 struct task_struct *tsk = current;
687 687
688 __asm__ __volatile__("movl %%db6,%0" : "=r" (condition)); 688 get_debugreg(condition, 6);
689 689
690 if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code, 690 if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
691 SIGTRAP) == NOTIFY_STOP) 691 SIGTRAP) == NOTIFY_STOP)
@@ -727,9 +727,7 @@ fastcall void do_debug(struct pt_regs * regs, long error_code)
727 * the signal is delivered. 727 * the signal is delivered.
728 */ 728 */
729clear_dr7: 729clear_dr7:
730 __asm__("movl %0,%%db7" 730 set_debugreg(0, 7);
731 : /* no output */
732 : "r" (0));
733 return; 731 return;
734 732
735debug_vm86: 733debug_vm86: