s390x/kvm: sync fprs via kvm_run
We can now also sync the fprs via kvm_run, avoiding one ioctl. Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
66fb2d5467
commit
5ab0e547bf
@ -342,6 +342,12 @@ int kvm_arch_put_registers(CPUState *cs, int level)
|
|||||||
}
|
}
|
||||||
cs->kvm_run->s.regs.fpc = env->fpc;
|
cs->kvm_run->s.regs.fpc = env->fpc;
|
||||||
cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_VRS;
|
cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_VRS;
|
||||||
|
} else if (can_sync_regs(cs, KVM_SYNC_FPRS)) {
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
cs->kvm_run->s.regs.fprs[i] = get_freg(env, i)->ll;
|
||||||
|
}
|
||||||
|
cs->kvm_run->s.regs.fpc = env->fpc;
|
||||||
|
cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_FPRS;
|
||||||
} else {
|
} else {
|
||||||
/* Floating point */
|
/* Floating point */
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
@ -482,6 +488,11 @@ int kvm_arch_get_registers(CPUState *cs)
|
|||||||
env->vregs[i][1].ll = cs->kvm_run->s.regs.vrs[i][1];
|
env->vregs[i][1].ll = cs->kvm_run->s.regs.vrs[i][1];
|
||||||
}
|
}
|
||||||
env->fpc = cs->kvm_run->s.regs.fpc;
|
env->fpc = cs->kvm_run->s.regs.fpc;
|
||||||
|
} else if (can_sync_regs(cs, KVM_SYNC_FPRS)) {
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
get_freg(env, i)->ll = cs->kvm_run->s.regs.fprs[i];
|
||||||
|
}
|
||||||
|
env->fpc = cs->kvm_run->s.regs.fpc;
|
||||||
} else {
|
} else {
|
||||||
r = kvm_vcpu_ioctl(cs, KVM_GET_FPU, &fpu);
|
r = kvm_vcpu_ioctl(cs, KVM_GET_FPU, &fpu);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user