On 25.10.18 14:37, Michael Mueller wrote: > The GIB (Guest Information Block) links the GISA of all guests > that have adapter interrupts pending. These interrupts cannot be > deliverd because no vcpu of these guests is currently running in > SIE context. Instead, a GIB alert is issued on the host to schedule > these guests to run. > > This mechanism allows to process adapter interrupts for currently > not running guests. > > The GIB is created during host initialization and associated with > the Adapter Interruption Facility in case an Adapter Interruption > Virtualization Facility is available. > > Signed-off-by: Michael Mueller <mimu@xxxxxxxxxxxxx> Reviewed-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > +void kvm_s390_gib_init(u8 nisc) > +{ > + int rc; > + > + if (gib) > + return; Given that we call this function from kvm_arch_init(), why do you expect this check to ever be true? > + > + if (!css_general_characteristics.aiv) { > + KVM_EVENT(3, "%s", "gib not initialized, no AIV facility"); > + return; > + } > + > + gib = (struct kvm_s390_gib *)get_zeroed_page(GFP_KERNEL | GFP_DMA); > + if (!gib) { > + KVM_EVENT(3, "%s", "gib memory allocation failed"); > + return; > + } > + > + gib->nisc = nisc; > + rc = chsc_sgib((u32)(u64)gib); > + if (rc) { > + KVM_EVENT(3, "gib 0x%pK AIV association failed rc: %d", > + gib, rc); > + free_page((unsigned long)gib); > + gib = NULL; > + return; > + } > + > + KVM_EVENT(3, "gib 0x%pK (nisc=%d) initialized", gib, gib->nisc); > +} > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index ac5da6b0b862..c75b01856092 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -433,6 +433,7 @@ int kvm_arch_init(void *opaque) > > void kvm_arch_exit(void) > { > + kvm_s390_gib_destroy(); > debug_unregister(kvm_s390_dbf); > } > > diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h > index 981e3ba97461..5983800d6433 100644 > --- a/arch/s390/kvm/kvm-s390.h > +++ b/arch/s390/kvm/kvm-s390.h > @@ -380,6 +380,8 @@ int kvm_s390_get_irq_state(struct kvm_vcpu *vcpu, > void kvm_s390_gisa_init(struct kvm *kvm); > void kvm_s390_gisa_clear(struct kvm *kvm); > void kvm_s390_gisa_destroy(struct kvm *kvm); > +void kvm_s390_gib_init(u8 nisc); > +void kvm_s390_gib_destroy(void); > > /* implemented in guestdbg.c */ > void kvm_s390_backup_guest_per_regs(struct kvm_vcpu *vcpu); >
Attachment:
signature.asc
Description: OpenPGP digital signature