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 31.10.18 09:18, Janosch Frank wrote:
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?

It is not, dropped the test.
+
+	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);



--
Mit freundlichen Grüßen / Kind regards
Michael Müller

IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294




[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