extern void fpsimd_update_current_state(struct user_fpsimd_state const *state);
 extern void fpsimd_kvm_prepare(void);
 
-extern void fpsimd_bind_state_to_cpu(struct user_fpsimd_state *state,
-                                    void *sve_state, unsigned int sve_vl,
-                                    void *za_state, unsigned int sme_vl,
-                                    u64 *svcr, enum fp_type *type,
-                                    enum fp_type to_save);
+struct cpu_fp_state {
+       struct user_fpsimd_state *st;
+       void *sve_state;
+       void *za_state;
+       u64 *svcr;
+       unsigned int sve_vl;
+       unsigned int sme_vl;
+       enum fp_type *fp_type;
+       enum fp_type to_save;
+};
+
+extern void fpsimd_bind_state_to_cpu(struct cpu_fp_state *fp_state);
 
 extern void fpsimd_flush_task_state(struct task_struct *target);
 extern void fpsimd_save_and_flush_cpu_state(void);
 
  *   returned from the 2nd syscall yet, TIF_FOREIGN_FPSTATE is still set so
  *   whatever is in the FPSIMD registers is not saved to memory, but discarded.
  */
-struct fpsimd_last_state_struct {
-       struct user_fpsimd_state *st;
-       void *sve_state;
-       void *za_state;
-       u64 *svcr;
-       unsigned int sve_vl;
-       unsigned int sme_vl;
-       enum fp_type *fp_type;
-       enum fp_type to_save;
-};
 
-static DEFINE_PER_CPU(struct fpsimd_last_state_struct, fpsimd_last_state);
+static DEFINE_PER_CPU(struct cpu_fp_state, fpsimd_last_state);
 
 __ro_after_init struct vl_info vl_info[ARM64_VEC_MAX] = {
 #ifdef CONFIG_ARM64_SVE
  */
 static void fpsimd_save(void)
 {
-       struct fpsimd_last_state_struct const *last =
+       struct cpu_fp_state const *last =
                this_cpu_ptr(&fpsimd_last_state);
        /* set by fpsimd_bind_task_to_cpu() or fpsimd_bind_state_to_cpu() */
        bool save_sve_regs = false;
  */
 static void fpsimd_bind_task_to_cpu(void)
 {
-       struct fpsimd_last_state_struct *last =
-               this_cpu_ptr(&fpsimd_last_state);
+       struct cpu_fp_state *last = this_cpu_ptr(&fpsimd_last_state);
 
        WARN_ON(!system_supports_fpsimd());
        last->st = ¤t->thread.uw.fpsimd_state;
        }
 }
 
-void fpsimd_bind_state_to_cpu(struct user_fpsimd_state *st, void *sve_state,
-                             unsigned int sve_vl, void *za_state,
-                             unsigned int sme_vl, u64 *svcr,
-                             enum fp_type *type, enum fp_type to_save)
+void fpsimd_bind_state_to_cpu(struct cpu_fp_state *state)
 {
-       struct fpsimd_last_state_struct *last =
-               this_cpu_ptr(&fpsimd_last_state);
+       struct cpu_fp_state *last = this_cpu_ptr(&fpsimd_last_state);
 
        WARN_ON(!system_supports_fpsimd());
        WARN_ON(!in_softirq() && !irqs_disabled());
 
-       last->st = st;
-       last->svcr = svcr;
-       last->sve_state = sve_state;
-       last->za_state = za_state;
-       last->sve_vl = sve_vl;
-       last->sme_vl = sme_vl;
-       last->fp_type = type;
-       last->to_save = to_save;
+       *last = *state;
 }
 
 /*
 
  */
 void kvm_arch_vcpu_ctxsync_fp(struct kvm_vcpu *vcpu)
 {
-       enum fp_type fp_type;
+       struct cpu_fp_state fp_state;
 
        WARN_ON_ONCE(!irqs_disabled());
 
        if (vcpu->arch.fp_state == FP_STATE_GUEST_OWNED) {
-               if (vcpu_has_sve(vcpu))
-                       fp_type = FP_STATE_SVE;
-               else
-                       fp_type = FP_STATE_FPSIMD;
 
                /*
                 * Currently we do not support SME guests so SVCR is
                 * always 0 and we just need a variable to point to.
                 */
-               fpsimd_bind_state_to_cpu(&vcpu->arch.ctxt.fp_regs,
-                                        vcpu->arch.sve_state,
-                                        vcpu->arch.sve_max_vl,
-                                        NULL, 0, &vcpu->arch.svcr,
-                                        &vcpu->arch.fp_type, fp_type);
+               fp_state.st = &vcpu->arch.ctxt.fp_regs;
+               fp_state.sve_state = vcpu->arch.sve_state;
+               fp_state.sve_vl = vcpu->arch.sve_max_vl;
+               fp_state.za_state = NULL;
+               fp_state.svcr = &vcpu->arch.svcr;
+               fp_state.fp_type = &vcpu->arch.fp_type;
+
+               if (vcpu_has_sve(vcpu))
+                       fp_state.to_save = FP_STATE_SVE;
+               else
+                       fp_state.to_save = FP_STATE_FPSIMD;
+
+               fpsimd_bind_state_to_cpu(&fp_state);
 
                clear_thread_flag(TIF_FOREIGN_FPSTATE);
        }