Re: [PATCH 02/10] KVM: s390: add the GIB and its related life-cyle functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux