sve_vq_from_vl(current->thread.sve_vl) - 1);
        else
                fpsimd_load_state(¤t->thread.uw.fpsimd_state);
-
-       if (system_supports_sve()) {
-               /* Toggle SVE trapping for userspace if needed */
-               if (test_thread_flag(TIF_SVE))
-                       sve_user_enable();
-               else
-                       sve_user_disable();
-
-               /* Serialised by exception return to user */
-       }
 }
 
 /*
 static void fpsimd_save(void)
 {
        struct user_fpsimd_state *st = __this_cpu_read(fpsimd_last_state.st);
-       /* set by fpsimd_bind_to_cpu() */
+       /* set by fpsimd_bind_task_to_cpu() */
 
        WARN_ON(!in_softirq() && !irqs_disabled());
 
  * Associate current's FPSIMD context with this cpu
  * Preemption must be disabled when calling this function.
  */
-static void fpsimd_bind_to_cpu(void)
+static void fpsimd_bind_task_to_cpu(void)
 {
        struct fpsimd_last_state_struct *last =
                this_cpu_ptr(&fpsimd_last_state);
        last->st = ¤t->thread.uw.fpsimd_state;
        last->sve_in_use = test_thread_flag(TIF_SVE);
        current->thread.fpsimd_cpu = smp_processor_id();
+
+       if (system_supports_sve()) {
+               /* Toggle SVE trapping for userspace if needed */
+               if (test_thread_flag(TIF_SVE))
+                       sve_user_enable();
+               else
+                       sve_user_disable();
+
+               /* Serialised by exception return to user */
+       }
 }
 
 /*
 
        if (test_and_clear_thread_flag(TIF_FOREIGN_FPSTATE)) {
                task_fpsimd_load();
-               fpsimd_bind_to_cpu();
+               fpsimd_bind_task_to_cpu();
        }
 
        local_bh_enable();
                fpsimd_to_sve(current);
 
        task_fpsimd_load();
+       fpsimd_bind_task_to_cpu();
 
-       if (test_and_clear_thread_flag(TIF_FOREIGN_FPSTATE))
-               fpsimd_bind_to_cpu();
+       clear_thread_flag(TIF_FOREIGN_FPSTATE);
 
        local_bh_enable();
 }