OSDN Git Service

Revert "ARM: vfp: ensure that thread flushing works if preempted"
authorColin Cross <ccross@android.com>
Sat, 17 Sep 2011 01:41:06 +0000 (18:41 -0700)
committerColin Cross <ccross@android.com>
Sat, 17 Sep 2011 01:50:07 +0000 (18:50 -0700)
This reverts commit 4f77fd436e53acf5bc0a06a24331f64b07fb33ec.

arch/arm/vfp/vfpmodule.c

index 50dbe35..445a996 100644 (file)
@@ -89,27 +89,24 @@ static void vfp_thread_flush(struct thread_info *thread)
        union vfp_state *vfp = &thread->vfpstate;
        unsigned int cpu;
 
+       memset(vfp, 0, sizeof(union vfp_state));
+
+       vfp->hard.fpexc = FPEXC_EN;
+       vfp->hard.fpscr = FPSCR_ROUND_NEAREST;
+#ifdef CONFIG_SMP
+       vfp->hard.cpu = NR_CPUS;
+#endif
+
        /*
         * Disable VFP to ensure we initialize it first.  We must ensure
-        * that the modification of vfp_current_hw_state[] and hardware
-        * disable are done for the same CPU and without preemption.
-        *
-        * Do this first to ensure that preemption won't overwrite our
-        * state saving should access to the VFP be enabled at this point.
+        * that the modification of vfp_current_hw_state[] and hardware disable
+        * are done for the same CPU and without preemption.
         */
        cpu = get_cpu();
        if (vfp_current_hw_state[cpu] == vfp)
                vfp_current_hw_state[cpu] = NULL;
        fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_EN);
        put_cpu();
-
-       memset(vfp, 0, sizeof(union vfp_state));
-
-       vfp->hard.fpexc = FPEXC_EN;
-       vfp->hard.fpscr = FPSCR_ROUND_NEAREST;
-#ifdef CONFIG_SMP
-       vfp->hard.cpu = NR_CPUS;
-#endif
 }
 
 static void vfp_thread_exit(struct thread_info *thread)