"[PATCH
Hi,
The following patch make use of the 2 new macro cpu_set_debugreg and cpu_get_debugreg.
as well, I can regenerate a patch keeping loaddebug if you folks seems that is necessary or better.
Please apply, or comments.
Signed-off-by Vincent Hanquez <[email protected]>
arch/i386/kernel/cpu/common.c +1 -1
@@ -631,7 +631,7 @@/* Clear all 6 debug registers: */ -#define CD (register) __asm__("movl %0,%%db" #register ::"r"(0) ); +#define CD (register) cpu_set_debugreg(0, register)CD (0 );CD (1 );CD (2 );CD (3 );/* no db4 and db5 */ ;CD (6 );CD (7 );
arch/i386/kernel/process.c +6 -6
@@ -626,13 +626,13 @@* Now maybe reload the debug registers */ if (unlikely (next->debugreg[7 ])) { -loaddebug (next,0 ); -loaddebug (next,1 ); -loaddebug (next,2 ); -loaddebug (next,3 ); +cpu_set_debugreg (current->thread.debugreg[0 ],0 ); +cpu_set_debugreg (current->thread.debugreg[1 ],1 ); +cpu_set_debugreg (current->thread.debugreg[2 ],2 ); +cpu_set_debugreg (current->thread.debugreg[3 ],3 );/* no 4 and 5 */ -loaddebug (next,6 ); -loaddebug (next,7 ); +cpu_set_debugreg (current->thread.debugreg[6 ],6 ); +cpu_set_debugreg (current->thread.debugreg[7 ],7 ); }if (unlikely (prev->io_bitmap_ptr || next->io_bitmap_ptr))
arch/i386/kernel/signal.c +1 -1
@@ -618,7 +618,7 @@* inside the kernel. */ if (unlikely (current->thread.debugreg[7 ])) { -loaddebug (¤t->thread,7 ); +cpu_set_debugreg (current->thread.debugreg[7 ],7 ); }/* Whee! Actually deliver the signal. */
arch/i386/kernel/traps.c +2 -4
@@ -682,7 +682,7 @@unsigned int condition;struct task_struct *tsk = current; - __asm__ __volatile__("movl %%db6,%0" :"=r" (condition)); +cpu_get_debugreg (condition,6 );if (notify_die (DIE_DEBUG ,"debug" , regs, condition, error_code,SIGTRAP ) ==NOTIFY_STOP )
@@ -724,9 +724,7 @@* the signal is delivered. */ clear_dr7: - __asm__("movl %0,%%db7" - :/* no output */ - :"r" (0 )); +cpu_set_debugreg (0 ,7 );return ; debug_vm86:
arch/i386/power/cpu.c +7 -7
@@ -94,13 +94,13 @@* Now maybe reload the debug registers */ if (current->thread.debugreg[7 ]){ -loaddebug (¤t->thread,0 ); -loaddebug (¤t->thread,1 ); -loaddebug (¤t->thread,2 ); -loaddebug (¤t->thread,3 ); -/* no 4 and 5 */ -loaddebug (¤t->thread,6 ); -loaddebug (¤t->thread,7 ); +cpu_set_debugreg (current->thread.debugreg[0 ],0 ); +cpu_set_debugreg (current->thread.debugreg[1 ],1 ); +cpu_set_debugreg (current->thread.debugreg[2 ],2 ); +cpu_set_debugreg (current->thread.debugreg[3 ],3 ); +/* no 4 and 5 */ +cpu_set_debugreg (current->thread.debugreg[6 ],6 ); +cpu_set_debugreg (current->thread.debugreg[7 ],7 ); } }
PATCH 2/6 Use new macro for debugreg
Hi,
The following patch make use of the 2 new macro cpu_set_debugreg and cpu_get_debugreg.
as well, I can regenerate a patch keeping loaddebug if you folks seems that is necessary or better.
ignore my previous mail, really sorry for the noise.
Please apply, or comments.
Signed-off-by Vincent Hanquez <[email protected]>
arch/i386/kernel/cpu/common.c +1 -1
@@ -631,7 +631,7 @@/* Clear all 6 debug registers: */ -#define CD (register) __asm__("movl %0,%%db" #register ::"r"(0) ); +#define CD (register) cpu_set_debugreg(0, register)CD (0 );CD (1 );CD (2 );CD (3 );/* no db4 and db5 */ ;CD (6 );CD (7 );
arch/i386/kernel/process.c +6 -6
@@ -626,13 +626,13 @@* Now maybe reload the debug registers */ if (unlikely (next->debugreg[7 ])) { -loaddebug (next,0 ); -loaddebug (next,1 ); -loaddebug (next,2 ); -loaddebug (next,3 ); +cpu_set_debugreg (current->thread.debugreg[0 ],0 ); +cpu_set_debugreg (current->thread.debugreg[1 ],1 ); +cpu_set_debugreg (current->thread.debugreg[2 ],2 ); +cpu_set_debugreg (current->thread.debugreg[3 ],3 );/* no 4 and 5 */ -loaddebug (next,6 ); -loaddebug (next,7 ); +cpu_set_debugreg (current->thread.debugreg[6 ],6 ); +cpu_set_debugreg (current->thread.debugreg[7 ],7 ); }if (unlikely (prev->io_bitmap_ptr || next->io_bitmap_ptr))
arch/i386/kernel/signal.c +1 -1
@@ -618,7 +618,7 @@* inside the kernel. */ if (unlikely (current->thread.debugreg[7 ])) { -loaddebug (¤t->thread,7 ); +cpu_set_debugreg (current->thread.debugreg[7 ],7 ); }/* Whee! Actually deliver the signal. */
arch/i386/kernel/traps.c +2 -4
@@ -682,7 +682,7 @@unsigned int condition;struct task_struct *tsk = current; - __asm__ __volatile__("movl %%db6,%0" :"=r" (condition)); +cpu_get_debugreg (condition,6 );if (notify_die (DIE_DEBUG ,"debug" , regs, condition, error_code,SIGTRAP ) ==NOTIFY_STOP )
@@ -724,9 +724,7 @@* the signal is delivered. */ clear_dr7: - __asm__("movl %0,%%db7" - :/* no output */ - :"r" (0 )); +cpu_set_debugreg (0 ,7 );return ; debug_vm86:
arch/i386/power/cpu.c +7 -7
@@ -94,13 +94,13 @@* Now maybe reload the debug registers */ if (current->thread.debugreg[7 ]){ -loaddebug (¤t->thread,0 ); -loaddebug (¤t->thread,1 ); -loaddebug (¤t->thread,2 ); -loaddebug (¤t->thread,3 ); -/* no 4 and 5 */ -loaddebug (¤t->thread,6 ); -loaddebug (¤t->thread,7 ); +cpu_set_debugreg (current->thread.debugreg[0 ],0 ); +cpu_set_debugreg (current->thread.debugreg[1 ],1 ); +cpu_set_debugreg (current->thread.debugreg[2 ],2 ); +cpu_set_debugreg (current->thread.debugreg[3 ],3 ); +/* no 4 and 5 */ +cpu_set_debugreg (current->thread.debugreg[6 ],6 ); +cpu_set_debugreg (current->thread.debugreg[7 ],7 ); } }