Skip to contentSkip to conversation

x86 flags cleanup

PATCH In review [email protected] 2 participants 4 messages Mar 28, 2008

Subsystems (3)
lore
Share & tools
lore
#2 lore raw

PATCH 2/2 x86: cleanup - rename VM_MASK to X86_VM_MASK

In reply to [email protected]

This patch renames VM_MASK to X86_VM_MASK (which in turn defined as alias to X86_EFLAGS_VM) to better distinguish from virtual memory flags. We can't just use X86_EFLAGS_VM instead because it is also used for conditional compilation

---

arch/x86/kernel/traps_32.c +1 -1
Index: linux-2.6.git/arch/x86/kernel/traps_32.c
===================================================================
@@ -499,7 +499,7 @@ do_trap(int trapnr, int signr, char *str
 {
 	struct task_struct *tsk = current;
 
-	if (regs->flags & VM_MASK) {
+	if (regs->flags & X86_VM_MASK) {
 		if (vm86)
 			goto vm86_trap;
 		goto trap_signal;
arch/x86/mm/fault.c +1 -1
Index: linux-2.6.git/arch/x86/mm/fault.c
===================================================================
@@ -667,7 +667,7 @@ void __kprobes do_page_fault(struct pt_r
 #ifdef CONFIG_X86_32
 	/* It's safe to allow irq's after cr2 has been saved and the vmalloc
 	   fault has been handled. */
-	if (regs->flags & (X86_EFLAGS_IF|VM_MASK))
+	if (regs->flags & (X86_EFLAGS_IF | X86_VM_MASK))
 		local_irq_enable();
 
 	/*
include/asm-x86/ptrace.h +2 -2
Index: linux-2.6.git/include/asm-x86/ptrace.h
===================================================================
@@ -170,7 +170,7 @@ static inline int user_mode(struct pt_re
 static inline int user_mode_vm(struct pt_regs *regs)
 {
 #ifdef CONFIG_X86_32
-	return ((regs->cs & SEGMENT_RPL_MASK) | (regs->flags & VM_MASK)) >=
+	return ((regs->cs & SEGMENT_RPL_MASK) | (regs->flags & X86_VM_MASK)) >=
 		USER_RPL;
 #else
 	return user_mode(regs);
@@ -180,7 +180,7 @@ static inline int user_mode_vm(struct pt
 static inline int v8086_mode(struct pt_regs *regs)
 {
 #ifdef CONFIG_X86_32
-	return (regs->flags & VM_MASK);
+	return (regs->flags & X86_VM_MASK);
 #else
 	return 0;	/* No V86 mode support in long mode */
 #endif
include/asm-x86/vm86.h +2 -2
Index: linux-2.6.git/include/asm-x86/vm86.h
===================================================================
@@ -15,9 +15,9 @@
 #include <asm/processor-flags.h>
 
 #ifdef CONFIG_VM86
-#define VM_MASK		0x00020000
+#define X86_VM_MASK	X86_EFLAGS_VM
 #else
-#define VM_MASK		0 /* ignored */
+#define X86_VM_MASK	0 /* No VM86 support */
 #endif
 
 #define BIOSSEG		0x0f000
#1 lore raw

PATCH 1/2 x86: cleanup - replace most VM86 flags with flags from processor-flags.h

In reply to [email protected]

---

arch/x86/kernel/vm86_32.c +17 -17
Index: linux-2.6.git/arch/x86/kernel/vm86_32.c
===================================================================
@@ -139,7 +139,7 @@ struct pt_regs *save_v86_state(struct ke
 		printk("no vm86_info: BAD\n");
 		do_exit(SIGSEGV);
 	}
-	set_flags(regs->pt.flags, VEFLAGS, VIF_MASK | current->thread.v86mask);
+	set_flags(regs->pt.flags, VEFLAGS, X86_EFLAGS_VIF | current->thread.v86mask);
 	tmp = copy_vm86_regs_to_user(&current->thread.vm86_info->regs, regs);
 	tmp += put_user(current->thread.screen_bitmap, &current->thread.vm86_info->screen_bitmap);
 	if (tmp) {
@@ -306,13 +306,13 @@ static void do_sys_vm86(struct kernel_vm
 		tsk->thread.v86mask = 0;
 		break;
 	case CPU_386:
-		tsk->thread.v86mask = NT_MASK | IOPL_MASK;
+		tsk->thread.v86mask = X86_EFLAGS_NT | X86_EFLAGS_IOPL;
 		break;
 	case CPU_486:
-		tsk->thread.v86mask = AC_MASK | NT_MASK | IOPL_MASK;
+		tsk->thread.v86mask = X86_EFLAGS_AC | X86_EFLAGS_NT | X86_EFLAGS_IOPL;
 		break;
 	default:
-		tsk->thread.v86mask = ID_MASK | AC_MASK | NT_MASK | IOPL_MASK;
+		tsk->thread.v86mask = X86_EFLAGS_ID | X86_EFLAGS_AC | X86_EFLAGS_NT | X86_EFLAGS_IOPL;
 		break;
 	}
 
@@ -363,24 +363,24 @@ static inline void return_to_32bit(struc
 
 static inline void set_IF(struct kernel_vm86_regs *regs)
 {
-	VEFLAGS |= VIF_MASK;
-	if (VEFLAGS & VIP_MASK)
+	VEFLAGS |= X86_EFLAGS_VIF;
+	if (VEFLAGS & X86_EFLAGS_VIP)
 		return_to_32bit(regs, VM86_STI);
 }
 
 static inline void clear_IF(struct kernel_vm86_regs *regs)
 {
-	VEFLAGS &= ~VIF_MASK;
+	VEFLAGS &= ~X86_EFLAGS_VIF;
 }
 
 static inline void clear_TF(struct kernel_vm86_regs *regs)
 {
-	regs->pt.flags &= ~TF_MASK;
+	regs->pt.flags &= ~X86_EFLAGS_TF;
 }
 
 static inline void clear_AC(struct kernel_vm86_regs *regs)
 {
-	regs->pt.flags &= ~AC_MASK;
+	regs->pt.flags &= ~X86_EFLAGS_AC;
 }
 
 /*
@@ -399,7 +399,7 @@ static inline void set_vflags_long(unsig
 {
 	set_flags(VEFLAGS, flags, current->thread.v86mask);
 	set_flags(regs->pt.flags, flags, SAFE_MASK);
-	if (flags & IF_MASK)
+	if (flags & X86_EFLAGS_IF)
 		set_IF(regs);
 	else
 		clear_IF(regs);
@@ -409,7 +409,7 @@ static inline void set_vflags_short(unsi
 {
 	set_flags(VFLAGS, flags, current->thread.v86mask);
 	set_flags(regs->pt.flags, flags, SAFE_MASK);
-	if (flags & IF_MASK)
+	if (flags & X86_EFLAGS_IF)
 		set_IF(regs);
 	else
 		clear_IF(regs);
@@ -419,9 +419,9 @@ static inline unsigned long get_vflags(s
 {
 	unsigned long flags = regs->pt.flags & RETURN_MASK;
 
-	if (VEFLAGS & VIF_MASK)
-		flags |= IF_MASK;
-	flags |= IOPL_MASK;
+	if (VEFLAGS & X86_EFLAGS_VIF)
+		flags |= X86_EFLAGS_IF;
+	flags |= X86_EFLAGS_IOPL;
 	return flags | (VEFLAGS & current->thread.v86mask);
 }
 
@@ -573,11 +573,11 @@ void handle_vm86_fault(struct kernel_vm8
 
 #define CHECK_IF_IN_TRAP \
 	if (VMPI.vm86dbg_active && VMPI.vm86dbg_TFpendig) \
-		newflags |= TF_MASK
+		newflags |= X86_EFLAGS_TF
 #define VM86_FAULT_RETURN do { \
-	if (VMPI.force_return_for_pic  && (VEFLAGS & (IF_MASK | VIF_MASK))) \
+	if (VMPI.force_return_for_pic  && (VEFLAGS & (X86_EFLAGS_IF | X86_EFLAGS_VIF))) \
 		return_to_32bit(regs, VM86_PICRETURN); \
-	if (orig_flags & TF_MASK) \
+	if (orig_flags & X86_EFLAGS_TF) \
 		handle_vm86_trap(regs, 0, 1); \
 	return; } while (0)
 
include/asm-x86/vm86.h +2 -8
Index: linux-2.6.git/include/asm-x86/vm86.h
===================================================================
@@ -12,19 +12,13 @@
  * Linus
  */
 
-#define TF_MASK		0x00000100
-#define IF_MASK		0x00000200
-#define IOPL_MASK	0x00003000
-#define NT_MASK		0x00004000
+#include <asm/processor-flags.h>
+
 #ifdef CONFIG_VM86
 #define VM_MASK		0x00020000
 #else
 #define VM_MASK		0 /* ignored */
 #endif
-#define AC_MASK		0x00040000
-#define VIF_MASK	0x00080000	/* virtual interrupt flag */
-#define VIP_MASK	0x00100000	/* virtual interrupt pending */
-#define ID_MASK		0x00200000
 
 #define BIOSSEG		0x0f000
 
arch/x86/mm/kmmio.c +5 -5
Index: linux-2.6.git/arch/x86/mm/kmmio.c
===================================================================
@@ -278,7 +278,7 @@ int kmmio_handler(struct pt_regs *regs, 
 
 	ctx->fpage = faultpage;
 	ctx->probe = get_kmmio_probe(addr);
-	ctx->saved_flags = (regs->flags & (TF_MASK|IF_MASK));
+	ctx->saved_flags = (regs->flags & (X86_EFLAGS_TF | X86_EFLAGS_IF));
 	ctx->addr = addr;
 
 	if (ctx->probe && ctx->probe->pre_handler)
@@ -288,8 +288,8 @@ int kmmio_handler(struct pt_regs *regs, 
 	 * Enable single-stepping and disable interrupts for the faulting
 	 * context. Local interrupts must not get enabled during stepping.
 	 */
-	regs->flags |= TF_MASK;
-	regs->flags &= ~IF_MASK;
+	regs->flags |= X86_EFLAGS_TF;
+	regs->flags &= ~X86_EFLAGS_IF;
 
 	/* Now we set present bit in PTE and single step. */
 	disarm_kmmio_fault_page(ctx->fpage->page, NULL);
@@ -330,7 +330,7 @@ static int post_kmmio_handler(unsigned l
 
 	arm_kmmio_fault_page(ctx->fpage->page, NULL);
 
-	regs->flags &= ~TF_MASK;
+	regs->flags &= ~X86_EFLAGS_TF;
 	regs->flags |= ctx->saved_flags;
 
 	/* These were acquired in kmmio_handler(). */
@@ -344,7 +344,7 @@ static int post_kmmio_handler(unsigned l
 	 * will have TF set, in which case, continue the remaining processing
 	 * of do_debug, as if this is not a probe hit.
 	 */
-	if (!(regs->flags & TF_MASK))
+	if (!(regs->flags & X86_EFLAGS_TF))
 		ret = 1;
 out:
 	put_cpu_var(kmmio_ctx);
arch/x86/kernel/kmemcheck_32.c +11 -11
Index: linux-2.6.git/arch/x86/kernel/kmemcheck_32.c
===================================================================
@@ -346,11 +346,11 @@ kmemcheck_show(struct pt_regs *regs)
 	 * NOTE: In the rare case of multiple faults, we must not override
 	 * the original flags:
 	 */
-	if (!(regs->flags & TF_MASK))
+	if (!(regs->flags & X86_EFLAGS_TF))
 		__get_cpu_var(kmemcheck_reg_flags) = regs->flags;
 
-	regs->flags |= TF_MASK;
-	regs->flags &= ~IF_MASK;
+	regs->flags |= X86_EFLAGS_TF;
+	regs->flags &= ~X86_EFLAGS_IF;
 }
 
 /*
@@ -372,10 +372,10 @@ kmemcheck_hide(struct pt_regs *regs)
 		__get_cpu_var(kmemcheck_addr2) = 0;
 		__get_cpu_var(kmemcheck_balance) = 0;
 
-		if (!(__get_cpu_var(kmemcheck_reg_flags) & TF_MASK))
-			regs->flags &= ~TF_MASK;
-		if (__get_cpu_var(kmemcheck_reg_flags) & IF_MASK)
-			regs->flags |= IF_MASK;
+		if (!(__get_cpu_var(kmemcheck_reg_flags) & X86_EFLAGS_TF))
+			regs->flags &= ~X86_EFLAGS_TF;
+		if (__get_cpu_var(kmemcheck_reg_flags) & X86_EFLAGS_IF)
+			regs->flags |= X86_EFLAGS_IF;
 		return;
 	}
 
@@ -384,10 +384,10 @@ kmemcheck_hide(struct pt_regs *regs)
 	__get_cpu_var(kmemcheck_addr1) = 0;
 	__get_cpu_var(kmemcheck_addr2) = 0;
 
-	if (!(__get_cpu_var(kmemcheck_reg_flags) & TF_MASK))
-		regs->flags &= ~TF_MASK;
-	if (__get_cpu_var(kmemcheck_reg_flags) & IF_MASK)
-		regs->flags |= IF_MASK;
+	if (!(__get_cpu_var(kmemcheck_reg_flags) & X86_EFLAGS_TF))
+		regs->flags &= ~X86_EFLAGS_TF;
+	if (__get_cpu_var(kmemcheck_reg_flags) & X86_EFLAGS_IF)
+		regs->flags |= X86_EFLAGS_IF;
 }
 
 void
arch/ia64/ia32/ia32_signal.c +2 -2
Index: linux-2.6.git/arch/ia64/ia32/ia32_signal.c
===================================================================
@@ -839,7 +839,7 @@ setup_frame_ia32 (int sig, struct k_siga
 	set_fs(USER_DS);
 
 #if 0
-	regs->eflags &= ~TF_MASK;
+	regs->eflags &= ~X86_EFLAGS_TF;
 #endif
 
 #if 0
@@ -917,7 +917,7 @@ setup_rt_frame_ia32 (int sig, struct k_s
 	set_fs(USER_DS);
 
 #if 0
-	regs->eflags &= ~TF_MASK;
+	regs->eflags &= ~X86_EFLAGS_TF;
 #endif
 
 #if 0
arch/x86/kernel/kgdb.c +2 -2
Index: linux-2.6.git/arch/x86/kernel/kgdb.c
===================================================================
@@ -371,12 +371,12 @@ int kgdb_arch_handle_exception(int e_vec
 		newPC = linux_regs->ip;
 
 		/* clear the trace bit */
-		linux_regs->flags &= ~TF_MASK;
+		linux_regs->flags &= ~X86_EFLAGS_TF;
 		atomic_set(&kgdb_cpu_doing_single_step, -1);
 
 		/* set the trace bit if we're stepping */
 		if (remcomInBuffer[0] == 's') {
-			linux_regs->flags |= TF_MASK;
+			linux_regs->flags |= X86_EFLAGS_TF;
 			kgdb_single_step = 1;
 			if (kgdb_contthread) {
 				atomic_set(&kgdb_cpu_doing_single_step,
arch/x86/kernel/kprobes.c +1 -1
Index: linux-2.6.git/arch/x86/kernel/kprobes.c
===================================================================
@@ -489,7 +489,7 @@ static int __kprobes reenter_kprobe(stru
 		break;
 	case KPROBE_HIT_SS:
 		if (p == kprobe_running()) {
-			regs->flags &= ~TF_MASK;
+			regs->flags &= ~X86_EFLAGS_TF;
 			regs->flags |= kcb->kprobe_saved_flags;
 			return 0;
 		} else {
arch/x86/kernel/signal_32.c +2 -2
Index: linux-2.6.git/arch/x86/kernel/signal_32.c
===================================================================
@@ -419,7 +419,7 @@ setup_frame(int sig, struct k_sigaction 
 	 * The tracer may want to single-step inside the
 	 * handler too.
 	 */
-	regs->flags &= ~(TF_MASK | X86_EFLAGS_DF);
+	regs->flags &= ~(X86_EFLAGS_TF | X86_EFLAGS_DF);
 	if (test_thread_flag(TIF_SINGLESTEP))
 		ptrace_notify(SIGTRAP);
 
@@ -507,7 +507,7 @@ static int setup_rt_frame(int sig, struc
 	 * The tracer may want to single-step inside the
 	 * handler too.
 	 */
-	regs->flags &= ~(TF_MASK | X86_EFLAGS_DF);
+	regs->flags &= ~(X86_EFLAGS_TF | X86_EFLAGS_DF);
 	if (test_thread_flag(TIF_SINGLESTEP))
 		ptrace_notify(SIGTRAP);
 
#0 lore raw

cover x86 flags cleanup

This patch series does remove some flags from x86.h. We should better use ones from processor-flags.h

Please review (and if it possible, give them a strong test, Ingo) Any comments appreciated

- Cyrill -