>> Yeah, but can this ever trigger without the check? AFAIKs, no. So why >> add it? > > It can. the GPRS can contain stale data and so can operand2. > Oh, ok. Makes sense. >> >> (rather add a BUG_ON in kvm_s390_inject_program_int() in case we are in >> PV mode) >> >>>> >>>>> >>>>> switch (fc) { >>>>> @@ -893,8 +893,13 @@ static int handle_stsi(struct kvm_vcpu *vcpu) >>>>> handle_stsi_3_2_2(vcpu, (void *) mem); >>>>> break; >>>>> } >>>>> - >>>>> - rc = write_guest(vcpu, operand2, ar, (void *)mem, PAGE_SIZE); >>>>> + if (kvm_s390_pv_is_protected(vcpu->kvm)) { >>>>> + memcpy((void *)sida_origin(vcpu->arch.sie_block), (void *)mem, >>>>> + PAGE_SIZE); >>>>> + rc = 0; >>>>> + } else { >>>>> + rc = write_guest(vcpu, operand2, ar, (void *)mem, PAGE_SIZE); >>>>> + } >>>>> if (rc) { >>>>> rc = kvm_s390_inject_prog_cond(vcpu, rc); >>>>> goto out; >>>>> >>>> >>>> I'd pull the interrupt injection into the else case, makes things clearer. >>> >>> Well, no. Thhe else case could set rc to 0. >> >> Huh?! >> >> if (kvm_s390_pv_is_protected(vcpu->kvm)) { >> memcpy((void *)sida_origin(vcpu->arch.sie_block), (void *)mem, >> rc = 0; >> } else { >> rc = write_guest(vcpu, operand2, ar, (void *)mem, PAGE_SIZE); >> if (rc) { >> rc = kvm_s390_inject_prog_cond(vcpu, rc); >> goto out; >> } >> } >> > > Hmm, I find that one harder to read. It's clearer that you only inject a program check when not in pv mode ... ;) No strong feelings. -- Thanks, David / dhildenb