On Tue, 25 Feb 2020 13:51:12 +0100 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > On 2/25/20 1:32 PM, Cornelia Huck wrote: > > On Mon, 24 Feb 2020 06:40:55 -0500 > > Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > > > >> From: Janosch Frank <frankja@xxxxxxxxxxxxx> > >> > >> For protected VMs the hypervisor can not access guest breaking event > >> address, program parameter, bpbc and todpr. Do not reset those fields > >> as the control block does not provide access to these fields. > >> > >> Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > >> Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> > >> [borntraeger@xxxxxxxxxx: patch merging, splitting, fixing] > >> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > >> --- > >> arch/s390/kvm/kvm-s390.c | 10 ++++++---- > >> 1 file changed, 6 insertions(+), 4 deletions(-) > >> > >> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > >> index 6ab4c88f2e1d..c734e89235f9 100644 > >> --- a/arch/s390/kvm/kvm-s390.c > >> +++ b/arch/s390/kvm/kvm-s390.c > >> @@ -3499,14 +3499,16 @@ static void kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu) > >> kvm_s390_set_prefix(vcpu, 0); > >> kvm_s390_set_cpu_timer(vcpu, 0); > >> vcpu->arch.sie_block->ckc = 0; > >> - vcpu->arch.sie_block->todpr = 0; > >> 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; > >> 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; > >> + 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; > > > > What happens if we do change those values? Is it just ignored or will > > we get an exception on the next SIE entry? > > Well, changing gbea is a bad idea because of the sida overlay. > I don't think that any other is checked, but I'd need to look up the > todpr changes to be completely sure. Maybe add a comment /* * Do not reset these registers in the protected case, as some of * them are overlayed and they are not accessible in this case * anyway. */ ? Just to avoid headscratching once this dropped out of our caches. > > > > >> + } > >> } > >> > >> static void kvm_arch_vcpu_ioctl_clear_reset(struct kvm_vcpu *vcpu) > > > >
Attachment:
pgpph6ZyrURGQ.pgp
Description: OpenPGP digital signature