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@xxxxxxxxxxxxxxx > > # v? > >> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> >> --- >> 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@xxxxxxxxxx> > > 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.