On Thu, 24 Oct 2019 07:40:38 -0400 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > From: Michael Mueller <mimu@xxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxx> > --- > 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();