On 10.03.20 14:21, David Hildenbrand wrote:
On 10.03.20 14:12, Christian Borntraeger wrote:
When we do the initial CPU reset we must not only clear the registers in the internal data structures but also in kvm_run sync_regs. For modern userspace sync_regs is the only place that it looks at.
Cc: stable@vger.kernel.org
# v?
Signed-off-by: Christian Borntraeger borntraeger@de.ibm.com
arch/s390/kvm/kvm-s390.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index d7ff30e45589..c2e6d4ba4e23 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -3268,7 +3268,10 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) /* Initial reset is a superset of the normal reset */ kvm_arch_vcpu_ioctl_normal_reset(vcpu);
- /* this equals initial cpu reset in pop, but we don't switch to ESA */
- /*
* This equals initial cpu reset in pop, but we don't switch to ESA.
* We do not only reset the internal data, but also ...
vcpu->arch.sie_block->gpsw.mask = 0; vcpu->arch.sie_block->gpsw.addr = 0; kvm_s390_set_prefix(vcpu, 0);*/
@@ -3278,6 +3281,19 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) memset(vcpu->arch.sie_block->gcr, 0, sizeof(vcpu->arch.sie_block->gcr)); vcpu->arch.sie_block->gcr[0] = CR0_INITIAL_MASK; vcpu->arch.sie_block->gcr[14] = CR14_INITIAL_MASK;
- /* ... the data in sync regs */
- memset(vcpu->run->s.regs.crs, 0, sizeof(vcpu->run->s.regs.crs));
- vcpu->run->s.regs.ckc = 0;
- vcpu->run->s.regs.crs[0] = CR0_INITIAL_MASK;
- vcpu->run->s.regs.crs[14] = CR14_INITIAL_MASK;
- vcpu->run->psw_addr = 0;
- vcpu->run->psw_mask = 0;
- vcpu->run->s.regs.todpr = 0;
- vcpu->run->s.regs.cputm = 0;
- vcpu->run->s.regs.ckc = 0;
- vcpu->run->s.regs.pp = 0;
- vcpu->run->s.regs.gbea = 1; vcpu->run->s.regs.fpc = 0; vcpu->arch.sie_block->gbea = 1; vcpu->arch.sie_block->pp = 0;
Acked-by: David Hildenbrand david@redhat.com
However, I do wonder if that ioctl *originally* was designed for that - IOW if this is rally a stable patch or just some change that makes sense. IIRC, userspace/QEMU always did the right thing, no? There was no documentation about the guarantees AFAIK.
Yes, I moved forth and back. Maybe removing cc stable and just adding Fixes: 7de3f1423ff ("KVM: s390: Add new reset vcpu API") is better then.