mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-16 18:17:46 +00:00
A s390x/kvm bugfix for missing floating point register synchronization.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJTw4USAAoJEN7Pa5PG8C+vgB0QAKnzhUdqIr0rnsUuTOqhl/Ri 7PER+qKt2O4GVGGFWxmZMrmeJ4qGMZwj8q441jRoiaSp/7zmpdTJDmZtC6GL8rm1 Sj+krzlCOxcSUFYtF0maBFMb8O7olt6Qe4wJhYnax9CSTTYzDG/ezOIPRF6KZra4 jCyRD4Q+Vjnp8sdFH1rNZXdDqal3DpRglLS4pRt0nIAtE8RnXQGRNS7lYZPC+AvN 6R/9VMFU38PxXsycNGMoVnAtgIe3VV0iiUbdxsa/R8FHXYZkWVHmwq2+CyxGIC2y lhubaljhfAYJGEhSgLPW0BUOJSDibIq3LbZ+sSTQESU1l0oysfuQ+pBrMmyvTYDg OIMOaMFm2rM7Jtmmpvf/wdTNZs0RJrtppPa1oTvy7YzmyHPHtdnZjZif6iY/rXsx 6jxWtx8wM4NmnNpeJNuM6qITB3pMd4P76AhRsme0P9UgNboj6uCbU2VRDOp+JpZU Elu5z11X312BGkldDR0peMaTJ7NeBG+MHXBDsZ+LvrbeHrBzu2VAh+RspxZQgnhn +HzYeuH8CvRH4kkrsNaCKd/DE36s8bvrcT6MxCD45XtPyW7greSnDvaFgvPIIlzU 6Rfkr3Zf2NwpRT+yB/F4JpYjaHLO6+dgK/rITUD1cT0Jfz1WALw9c8f0oDwMDbDA IDraPJy6iNs0iQE4GuD1 =TXJv -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20140714' into staging A s390x/kvm bugfix for missing floating point register synchronization. # gpg: Signature made Mon 14 Jul 2014 08:21:54 BST using RSA key ID C6F02FAF # gpg: Can't check signature: public key not found * remotes/cohuck/tags/s390x-20140714: s390x/kvm: synchronize guest floating point registers Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
c15a34eda0
@ -207,6 +207,7 @@ int kvm_arch_put_registers(CPUState *cs, int level)
|
||||
CPUS390XState *env = &cpu->env;
|
||||
struct kvm_sregs sregs;
|
||||
struct kvm_regs regs;
|
||||
struct kvm_fpu fpu;
|
||||
int r;
|
||||
int i;
|
||||
|
||||
@ -229,6 +230,17 @@ int kvm_arch_put_registers(CPUState *cs, int level)
|
||||
}
|
||||
}
|
||||
|
||||
/* Floating point */
|
||||
for (i = 0; i < 16; i++) {
|
||||
fpu.fprs[i] = env->fregs[i].ll;
|
||||
}
|
||||
fpu.fpc = env->fpc;
|
||||
|
||||
r = kvm_vcpu_ioctl(cs, KVM_SET_FPU, &fpu);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Do we need to save more than that? */
|
||||
if (level == KVM_PUT_RUNTIME_STATE) {
|
||||
return 0;
|
||||
@ -296,6 +308,7 @@ int kvm_arch_get_registers(CPUState *cs)
|
||||
CPUS390XState *env = &cpu->env;
|
||||
struct kvm_sregs sregs;
|
||||
struct kvm_regs regs;
|
||||
struct kvm_fpu fpu;
|
||||
int i, r;
|
||||
|
||||
/* get the PSW */
|
||||
@ -336,6 +349,16 @@ int kvm_arch_get_registers(CPUState *cs)
|
||||
}
|
||||
}
|
||||
|
||||
/* Floating point */
|
||||
r = kvm_vcpu_ioctl(cs, KVM_GET_FPU, &fpu);
|
||||
if (r < 0) {
|
||||
return r;
|
||||
}
|
||||
for (i = 0; i < 16; i++) {
|
||||
env->fregs[i].ll = fpu.fprs[i];
|
||||
}
|
||||
env->fpc = fpu.fpc;
|
||||
|
||||
/* The prefix */
|
||||
if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) {
|
||||
env->psa = cs->kvm_run->s.regs.prefix;
|
||||
|
Loading…
x
Reference in New Issue
Block a user