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;
-       vcpu->arch.sie_block->fpf &= ~FPF_BPBC;
+       /*
+        * Do not reset these registers in the protected case, as some of
+        * them are overlayed and they are not accessible in this case
+        * anyway.
+        */
+       if (!kvm_s390_pv_cpu_is_protected(vcpu)) {
+               vcpu->arch.sie_block->gbea = 1;
+               vcpu->arch.sie_block->pp = 0;
+               vcpu->arch.sie_block->fpf &= ~FPF_BPBC;
+               vcpu->arch.sie_block->todpr = 0;
+       }
  }
  
  static void kvm_arch_vcpu_ioctl_clear_reset(struct kvm_vcpu *vcpu)