KVM: s390: Fix for fpu register errors since 4.7
This fixes a regression that was introduced by a semantic change in commit3f6813b9a5
("s390/fpu: allocate 'struct fpu' with the task_struct"). Symptoms are broken host userspace fpu registers if the old FPU set/get ioctls are used. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (GNU/Linux) iQIcBAABAgAGBQJXvxNAAAoJEBF7vIC1phx8LdsQAIrzq8fRarrNhOX595ur1Js/ ygB4TkwismmCtSIuqqBOkxlTS2HyED4o3C3i38x4wYiQQtGtGaS0nZFZ8VF064Po c9//lGMtJXTp+xJDodWTQPgRC/wdaoEOEdKwfm0svd8DmqivRmgAFZ3o+olZVBDL QlE9JBDk04+3z1eOLD4vdO0F7z4R/U0DJNdDQnPKGakJETO6Y6kAublpA1p27UHC dktpQOle2dEYt9EpBiTmMFIOXkMt0ilaS5SwTjydRlXvrpCV3edtJSlvvJm7/KRc SMdLUqQjeR7Pcaxg13p6wm+lj6Isq6bsB+fylnMd94rNia+OgVgETzGPMXCqE5HY 8DeWL5m4PN73Gx2HO+MDIYmYFtlwkoTMOLcVyk6yXeoM1cUHDBhNmLw2RzZTx/rZ ArqO8qk20zbggdvEhEAL7npsWVBbX2BsLRfw/ALxVh+EP4IjMsj609Ll78oieay5 fE6idPHySlhZPqkTo6qu5spYGwsUanTzNGrAxYGEBJwt8lET80vqnqM6Oq2CSvHL 8zqsORBWzOJyJUyq174z63s7Pi8qGQEMmYE0qN8hIqCNK0YMMYPKCenL/SHegcr0 ohWyvDxbkgeW0MwsF75wuJQ6mV/nnYcZHonrkHSWcdXn1QWuJiK5lffYgJmcO/JS 7ppOE1YBoHVbN131h0R2 =S2yL -----END PGP SIGNATURE----- Merge tag 'kvm-s390-master-4.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into kvm-master KVM: s390: Fix for fpu register errors since 4.7 This fixes a regression that was introduced by a semantic change in commit3f6813b9a5
("s390/fpu: allocate 'struct fpu' with the task_struct"). Symptoms are broken host userspace fpu registers if the old FPU set/get ioctls are used.
This commit is contained in:
Коммит
20b8f9e2dd
|
@ -2231,9 +2231,10 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
|
|||
return -EINVAL;
|
||||
current->thread.fpu.fpc = fpu->fpc;
|
||||
if (MACHINE_HAS_VX)
|
||||
convert_fp_to_vx(current->thread.fpu.vxrs, (freg_t *)fpu->fprs);
|
||||
convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs,
|
||||
(freg_t *) fpu->fprs);
|
||||
else
|
||||
memcpy(current->thread.fpu.fprs, &fpu->fprs, sizeof(fpu->fprs));
|
||||
memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2242,9 +2243,10 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
|
|||
/* make sure we have the latest values */
|
||||
save_fpu_regs();
|
||||
if (MACHINE_HAS_VX)
|
||||
convert_vx_to_fp((freg_t *)fpu->fprs, current->thread.fpu.vxrs);
|
||||
convert_vx_to_fp((freg_t *) fpu->fprs,
|
||||
(__vector128 *) vcpu->run->s.regs.vrs);
|
||||
else
|
||||
memcpy(fpu->fprs, current->thread.fpu.fprs, sizeof(fpu->fprs));
|
||||
memcpy(fpu->fprs, vcpu->run->s.regs.fprs, sizeof(fpu->fprs));
|
||||
fpu->fpc = current->thread.fpu.fpc;
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче