Message ID | 20191024114059.102802-17-frankja@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: Add support for protected VMs | expand |
On Thu, 24 Oct 2019 07:40:38 -0400 Janosch Frank <frankja@linux.ibm.com> wrote: > From: Michael Mueller <mimu@linux.ibm.com> > > Similar to external interrupts, the hypervisor can inject machine > checks by providing the right data in the interrupt injection controls. > > Signed-off-by: Michael Mueller <mimu@linux.ibm.com> > --- > arch/s390/kvm/interrupt.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c > index c919dfe4dfd3..1f87c7d3fa3e 100644 > --- a/arch/s390/kvm/interrupt.c > +++ b/arch/s390/kvm/interrupt.c > @@ -568,6 +568,14 @@ static int __write_machine_check(struct kvm_vcpu *vcpu, > union mci mci; > int rc; > > + if (kvm_s390_pv_is_protected(vcpu->kvm)) { > + vcpu->arch.sie_block->iictl = IICTL_CODE_MCHK; > + vcpu->arch.sie_block->mcic = mchk->mcic; > + vcpu->arch.sie_block->faddr = mchk->failing_storage_address; > + vcpu->arch.sie_block->edc = mchk->ext_damage_code; > + return 0; > + } > + The other stuff this function injects in the !pv case is inaccessible to the hypervisor in the pv case, right? (Registers, extended save area, ...) Maybe add a comment? > mci.val = mchk->mcic; > /* take care of lazy register loading */ > save_fpu_regs();
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index c919dfe4dfd3..1f87c7d3fa3e 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c @@ -568,6 +568,14 @@ static int __write_machine_check(struct kvm_vcpu *vcpu, union mci mci; int rc; + if (kvm_s390_pv_is_protected(vcpu->kvm)) { + vcpu->arch.sie_block->iictl = IICTL_CODE_MCHK; + vcpu->arch.sie_block->mcic = mchk->mcic; + vcpu->arch.sie_block->faddr = mchk->failing_storage_address; + vcpu->arch.sie_block->edc = mchk->ext_damage_code; + return 0; + } + mci.val = mchk->mcic; /* take care of lazy register loading */ save_fpu_regs();