ARM: KVM: Move VFP registers to a CPU context structure
In order to turn the WS code into something that looks a bit more like the arm64 version, move the VFP registers into a CPU context container for both the host and the guest. Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
@@ -901,7 +901,7 @@ static int vfp_get_reg(const struct kvm_vcpu *vcpu, u64 id, void __user *uaddr)
|
||||
if (vfpid < num_fp_regs()) {
|
||||
if (KVM_REG_SIZE(id) != 8)
|
||||
return -ENOENT;
|
||||
return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpregs[vfpid],
|
||||
return reg_to_user(uaddr, &vcpu->arch.ctxt.vfp.fpregs[vfpid],
|
||||
id);
|
||||
}
|
||||
|
||||
@@ -911,13 +911,13 @@ static int vfp_get_reg(const struct kvm_vcpu *vcpu, u64 id, void __user *uaddr)
|
||||
|
||||
switch (vfpid) {
|
||||
case KVM_REG_ARM_VFP_FPEXC:
|
||||
return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpexc, id);
|
||||
return reg_to_user(uaddr, &vcpu->arch.ctxt.vfp.fpexc, id);
|
||||
case KVM_REG_ARM_VFP_FPSCR:
|
||||
return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpscr, id);
|
||||
return reg_to_user(uaddr, &vcpu->arch.ctxt.vfp.fpscr, id);
|
||||
case KVM_REG_ARM_VFP_FPINST:
|
||||
return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpinst, id);
|
||||
return reg_to_user(uaddr, &vcpu->arch.ctxt.vfp.fpinst, id);
|
||||
case KVM_REG_ARM_VFP_FPINST2:
|
||||
return reg_to_user(uaddr, &vcpu->arch.vfp_guest.fpinst2, id);
|
||||
return reg_to_user(uaddr, &vcpu->arch.ctxt.vfp.fpinst2, id);
|
||||
case KVM_REG_ARM_VFP_MVFR0:
|
||||
val = fmrx(MVFR0);
|
||||
return reg_to_user(uaddr, &val, id);
|
||||
@@ -945,7 +945,7 @@ static int vfp_set_reg(struct kvm_vcpu *vcpu, u64 id, const void __user *uaddr)
|
||||
if (vfpid < num_fp_regs()) {
|
||||
if (KVM_REG_SIZE(id) != 8)
|
||||
return -ENOENT;
|
||||
return reg_from_user(&vcpu->arch.vfp_guest.fpregs[vfpid],
|
||||
return reg_from_user(&vcpu->arch.ctxt.vfp.fpregs[vfpid],
|
||||
uaddr, id);
|
||||
}
|
||||
|
||||
@@ -955,13 +955,13 @@ static int vfp_set_reg(struct kvm_vcpu *vcpu, u64 id, const void __user *uaddr)
|
||||
|
||||
switch (vfpid) {
|
||||
case KVM_REG_ARM_VFP_FPEXC:
|
||||
return reg_from_user(&vcpu->arch.vfp_guest.fpexc, uaddr, id);
|
||||
return reg_from_user(&vcpu->arch.ctxt.vfp.fpexc, uaddr, id);
|
||||
case KVM_REG_ARM_VFP_FPSCR:
|
||||
return reg_from_user(&vcpu->arch.vfp_guest.fpscr, uaddr, id);
|
||||
return reg_from_user(&vcpu->arch.ctxt.vfp.fpscr, uaddr, id);
|
||||
case KVM_REG_ARM_VFP_FPINST:
|
||||
return reg_from_user(&vcpu->arch.vfp_guest.fpinst, uaddr, id);
|
||||
return reg_from_user(&vcpu->arch.ctxt.vfp.fpinst, uaddr, id);
|
||||
case KVM_REG_ARM_VFP_FPINST2:
|
||||
return reg_from_user(&vcpu->arch.vfp_guest.fpinst2, uaddr, id);
|
||||
return reg_from_user(&vcpu->arch.ctxt.vfp.fpinst2, uaddr, id);
|
||||
/* These are invariant. */
|
||||
case KVM_REG_ARM_VFP_MVFR0:
|
||||
if (reg_from_user(&val, uaddr, id))
|
||||
|
Reference in New Issue
Block a user