x86 ptrace: avoid unnecessary wrmsr
[sfrench/cifs-2.6.git] / arch / x86 / kernel / step.c
index 9d406cdc847f4da493611d3f48a634e8f868792b..071ff4798236736f9d961050954589a4adb54fe4 100644 (file)
@@ -140,6 +140,9 @@ static int enable_single_step(struct task_struct *child)
  */
 static void write_debugctlmsr(struct task_struct *child, unsigned long val)
 {
  */
 static void write_debugctlmsr(struct task_struct *child, unsigned long val)
 {
+       if (child->thread.debugctlmsr == val)
+               return;
+
        child->thread.debugctlmsr = val;
 
        if (child != current)
        child->thread.debugctlmsr = val;
 
        if (child != current)
@@ -165,11 +168,11 @@ static void enable_step(struct task_struct *child, bool block)
                write_debugctlmsr(child,
                                  child->thread.debugctlmsr | DEBUGCTLMSR_BTF);
        } else {
                write_debugctlmsr(child,
                                  child->thread.debugctlmsr | DEBUGCTLMSR_BTF);
        } else {
-           write_debugctlmsr(child,
-                             child->thread.debugctlmsr & ~DEBUGCTLMSR_BTF);
+               write_debugctlmsr(child,
+                                 child->thread.debugctlmsr & ~DEBUGCTLMSR_BTF);
 
 
-           if (!child->thread.debugctlmsr)
-                   clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
+               if (!child->thread.debugctlmsr)
+                       clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
        }
 }
 
        }
 }