Skip to contentSkip to conversation

Add macro for debugreg

PATCH In review Vincent Hanquez 4 participants 5 messages Apr 26, 2005 – Apr 27, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 5/6 Add macro for debugreg

Hi,

The following patch add 2 macros to set and get debugreg on x86_64. This is useful for Xen because it will need only to redefine each macro to a hypervisor call.

Please apply, or comments.

arch/x86_64/kernel/signal.c +1 -1
diff -Naur linux-2.6.12-rc3.1/arch/x86_64/kernel/signal.c linux-2.6.12-rc3.2/arch/x86_64/kernel/signal.c
@@ -433,7 +433,7 @@
 		 * inside the kernel.
 		 */
 		if (current->thread.debugreg7)
-			asm volatile("movq %0,%%db7"	: : "r" (current->thread.debugreg7));
+			cpu_set_debugreg(current->thread.debugreg7, 7);
 
 		/* Whee!  Actually deliver the signal.  */
 		handle_signal(signr, &info, &ka, oldset, regs);
arch/x86_64/kernel/traps.c +2 -2
diff -Naur linux-2.6.12-rc3.1/arch/x86_64/kernel/traps.c linux-2.6.12-rc3.2/arch/x86_64/kernel/traps.c
@@ -667,7 +667,7 @@
        }
 #endif
 
-	asm("movq %%db6,%0" : "=r" (condition));
+	cpu_get_debugreg(condition, 6);
 
 	if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
 						SIGTRAP) == NOTIFY_STOP)
@@ -719,7 +719,7 @@
 	info.si_addr = (void __user *)regs->rip;
 	force_sig_info(SIGTRAP, &info, tsk);	
 clear_dr7:
-	asm volatile("movq %0,%%db7"::"r"(0UL));
+	cpu_set_debugreg(0UL, 7);
 	return;
 
 clear_TF_reenable:
include/asm-x86_64/processor.h +8 -0
diff -Naur linux-2.6.12-rc3.1/include/asm-x86_64/processor.h linux-2.6.12-rc3.2/include/asm-x86_64/processor.h
@@ -280,6 +280,14 @@
 	set_fs(USER_DS);							 \
 } while(0) 
 
+#define cpu_get_debugreg(var, register)				\
+		__asm__("movq %%db" #register ", %0"		\
+			:"=r" (var))
+#define cpu_set_debugreg(value, register)			\
+		__asm__("movq %0,%%db" #register		\
+			: /* no output */			\
+			:"r" (value))
+
 struct task_struct;
 struct mm_struct;
 
#1 lore raw
Quoted 7 lines · Vincent Hanquez

Hi,

The following patch add 2 macros to set and get debugreg on x86_64. This is useful for Xen because it will need only to redefine each macro to a hypervisor call.

Please apply, or comments.

Thanks,

It looks good, except that the name of the macro is too long. I will queue it and fix the name up when I apply.

If you plan to add a lot more of these I would recommend to create a new header first, processor.h is already quite crowded.

-Andi

#2 lore raw
Quoted 2 lines · Andi Kleen

It looks good, except that the name of the macro is too long. I will queue it and fix the name up when I apply.

fine. let me know the new name, I'll regenerate a new set of patch for x86 too. It's probably better to have the same name between the 2 archs.

Quoted 2 lines

If you plan to add a lot more of these I would recommend to create a new header first, processor.h is already quite crowded.

Right. Although I think that's all (at least at the moment). I'll consider that anyway, if more shows up.

Thanks,

Signature · 1 line
Vincent Hanquez
#3 lore raw
Quoted 6 lines · Vincent Hanquez
Quoted 2 lines · Andi Kleen

It looks good, except that the name of the macro is too long. I will queue it and fix the name up when I apply.

fine. let me know the new name, I'll regenerate a new set of patch for x86 too. It's probably better to have the same name between the 2 archs.

Just dropping the cpu_ should be enough.

-Andi

#4 lore raw
Quoted 10 lines · Andi Kleen
Quoted 6 lines · Vincent Hanquez
Quoted 2 lines · Andi Kleen

It looks good, except that the name of the macro is too long. I will queue it and fix the name up when I apply.

fine. let me know the new name, I'll regenerate a new set of patch for x86 too. It's probably better to have the same name between the 2 archs.

Just dropping the cpu_ should be enough.

I've edited the six diffs to remove the cpu_.