KVM: s390: Fix for fpu register errors since 4.7

This fixes a regression that was introduced by a semantic
 change in commit 3f6813b9a5 ("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 commit 3f6813b9a5 ("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:
Paolo Bonzini 2016-08-30 14:11:33 +02:00
Родитель 3eab887a55 a7d4b8f256
Коммит 20b8f9e2dd
1 изменённых файлов: 6 добавлений и 4 удалений

Просмотреть файл

@ -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;
}