On 10.03.20 14:23, Christian Borntraeger wrote: > > > 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. Makes sense. -- Thanks, David / dhildenb