Blob Blame History Raw
From: Farhan Ali <alifm@linux.ibm.com>
Subject: KVM: s390: vsie: allow guest FORMAT-0 CRYCB on host FORMAT-1
Patch-mainline: v4.20-rc1
Git-commit: c9ba8c2cd210d35cdb48683db7c94f11c236d841
References: FATE#326370, LTC#169186, bsc#1113483

Summary:     kernel: AP Crypto Passthrough 
Description: This adds support for AP crypto passthrough for 
             kvm guests.

Upstream-Description:

             KVM: s390: vsie: allow guest FORMAT-0 CRYCB on host FORMAT-1

             When the guest schedules a SIE with a FORMAT-0 CRYCB,
             we are able to schedule it in the host with a FORMAT-1
             CRYCB if the host uses FORMAT-1 or FORMAT-0.

             Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
             Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
             Message-Id: <20180925231641.4954-22-akrowiak@linux.vnet.ibm.com>
             Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>

Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 arch/s390/kvm/vsie.c |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

--- a/arch/s390/kvm/vsie.c
+++ b/arch/s390/kvm/vsie.c
@@ -210,11 +210,17 @@ static int setup_apcb(struct kvm_vcpu *v
 	case CRYCB_FORMAT0:
 		if ((crycb_o & PAGE_MASK) != ((crycb_o + 32) & PAGE_MASK))
 			return -EACCES;
-		if (fmt_h != CRYCB_FORMAT0)
+
+		switch (fmt_h) {
+		case CRYCB_FORMAT2:
 			return -EINVAL;
-		return setup_apcb00(vcpu, (unsigned long *) &crycb_s->apcb0,
-				    (unsigned long) &crycb->apcb0,
-				    (unsigned long *) &crycb_h->apcb0);
+		case CRYCB_FORMAT1:
+		case CRYCB_FORMAT0:
+			return setup_apcb00(vcpu,
+					    (unsigned long *) &crycb_s->apcb0,
+					    (unsigned long) &crycb->apcb0,
+					    (unsigned long *) &crycb_h->apcb0);
+		}
 	}
 	return -EINVAL;
 }