{
int ret;
- struct thread_info *ti = ¤t->thread_info;
struct user_fpsimd_state *fpsimd = ¤t->thread.uw.fpsimd_state;
- /*
- * Make sure the host task thread flags and fpsimd state are
- * visible to hyp:
- */
- ret = create_hyp_mappings(ti, ti + 1, PAGE_HYP);
- if (ret)
- goto error;
-
+ /* Make sure the host task fpsimd state is visible to hyp: */
ret = create_hyp_mappings(fpsimd, fpsimd + 1, PAGE_HYP);
-- if (ret)
-- goto error;
++ if (!ret)
++ vcpu->arch.host_fpsimd_state = kern_hyp_va(fpsimd);
- vcpu->arch.host_thread_info = kern_hyp_va(ti);
- if (vcpu->arch.sve_state) {
- void *sve_end;
-
- sve_end = vcpu->arch.sve_state + vcpu_sve_state_size(vcpu);
-
- ret = create_hyp_mappings(vcpu->arch.sve_state, sve_end,
- PAGE_HYP);
- if (ret)
- goto error;
- }
-
-- vcpu->arch.host_fpsimd_state = kern_hyp_va(fpsimd);
--error:
return ret;
}