KVM: s390: define GISA format-0 data structure

"Linux Kernel Mailing List" <[email protected]>
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/19114beb73f774e466d9e39b8e8b961812c9f881
Commit:     19114beb73f774e466d9e39b8e8b961812c9f881
Parent:     c7901a6ebee4b624971361bbd93f21ab0b359786
Refname:    refs/heads/master
Author:     Michael Mueller <[email protected]>
AuthorDate: Tue May 30 14:26:02 2017 +0200
Committer:  Christian Borntraeger <[email protected]>
CommitDate: Fri Jan 26 10:47:29 2018 +0100

    KVM: s390: define GISA format-0 data structure
    
    In preperation to support pass-through adapter interrupts, the Guest
    Interruption State Area (GISA) and the Adapter Interruption Virtualization
    (AIV) features will be introduced here.
    
    This patch introduces format-0 GISA (that is defines the struct describing
    the GISA, allocates storage for it, and introduces fields for the
    GISA address in kvm_s390_sie_block and kvm_s390_vsie).
    
    As the GISA requires storage below 2GB, it is put in sie_page2, which is
    already allocated in ZONE_DMA. In addition, The GISA requires alignment to
    its integral boundary. This is already naturally aligned via the
    padding in the sie_page2.
    
    Signed-off-by: Michael Mueller <[email protected]>
    Reviewed-by: Pierre Morel <[email protected]>
    Reviewed-by: Halil Pasic <[email protected]>
    Reviewed-by: Christian Borntraeger <[email protected]>
    Reviewed-by: David Hildenbrand <[email protected]>
    Acked-by: Cornelia Huck <[email protected]>
    Signed-off-by: Christian Borntraeger <[email protected]>
---
 arch/s390/include/asm/kvm_host.h | 23 +++++++++++++++++++----
 arch/s390/kvm/kvm-s390.c         |  1 +
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index d2351d63afa3..4f89b2783512 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -183,6 +183,7 @@ struct kvm_s390_sie_block {
 #define ECA_IB		0x40000000
 #define ECA_SIGPI	0x10000000
 #define ECA_MVPGI	0x01000000
+#define ECA_AIV		0x00200000
 #define ECA_VX		0x00020000
 #define ECA_PROTEXCI	0x00002000
 #define ECA_SII		0x00000001
@@ -227,7 +228,8 @@ struct kvm_s390_sie_block {
 	__u8    epdx;			/* 0x0069 */
 	__u8    reserved6a[2];		/* 0x006a */
 	__u32	todpr;			/* 0x006c */
-	__u8	reserved70[16];		/* 0x0070 */
+	__u32	gd;			/* 0x0070 */
+	__u8	reserved74[12];		/* 0x0074 */
 	__u64	mso;			/* 0x0080 */
 	__u64	msl;			/* 0x0088 */
 	psw_t	gpsw;			/* 0x0090 */
@@ -716,14 +718,27 @@ struct kvm_s390_crypto_cb {
 	struct kvm_s390_apcb1 apcb1;		/* 0x0080 */
 };
 
+struct kvm_s390_gisa {
+	u32 next_alert;
+	u8 ipm;
+	u8 reserved01;
+	u8 : 6;
+	u8 g : 1;
+	u8 c : 1;
+	u8 iam;
+	u8 reserved02[4];
+	u32 airq_count;
+};
+
 /*
- * sie_page2 has to be allocated as DMA because fac_list and crycb need
- * 31bit addresses in the sie control block.
+ * sie_page2 has to be allocated as DMA because fac_list, crycb and
+ * gisa need 31bit addresses in the sie control block.
  */
 struct sie_page2 {
 	__u64 fac_list[S390_ARCH_FAC_LIST_SIZE_U64];	/* 0x0000 */
 	struct kvm_s390_crypto_cb crycb;		/* 0x0800 */
-	u8 reserved900[0x1000 - 0x900];			/* 0x0900 */
+	struct kvm_s390_gisa gisa;			/* 0x0900 */
+	u8 reserved910[0x1000 - 0x910];			/* 0x0910 */
 };
 
 struct kvm_s390_vsie {
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 3dd209de2e0c..2fbdb1601089 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1928,6 +1928,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 	if (!kvm->arch.dbf)
 		goto out_err;
 
+	BUILD_BUG_ON(sizeof(struct sie_page2) != 4096);
 	kvm->arch.sie_page2 =
 	     (struct sie_page2 *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
 	if (!kvm->arch.sie_page2)
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.