Blob Blame History Raw
From: =?utf-8?q?J=C3=BCrgen_Christ_=3Cjchrist=40linux=2Eibm=2Ecom=3E?=
Date: Mon, 10 Jan 2022 13:33:30 +0100
Subject: s390/zcrypt: Provide target domain for EP11 cprbs to scheduling
 function
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Git-commit: 1024063effc3ba86d1fec0f2ee0a9259a1065ed5
Patch-mainline: v5.18-rc1
References: jsc#PED-596

The scheduling function will get an extension which will
process the target_id value from an EP11 cprb. This patch
extracts the value during preparation of the ap message.

Signed-off-by: Jürgen Christ <jchrist@linux.ibm.com>
Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/s390/crypto/zcrypt_api.c      |    4 ++--
 drivers/s390/crypto/zcrypt_msgtype6.c |   10 +++++++---
 drivers/s390/crypto/zcrypt_msgtype6.h |    2 +-
 3 files changed, 10 insertions(+), 6 deletions(-)

--- a/drivers/s390/crypto/zcrypt_api.c
+++ b/drivers/s390/crypto/zcrypt_api.c
@@ -1022,7 +1022,7 @@ static long _zcrypt_send_ep11_cprb(bool
 	struct ep11_target_dev *targets;
 	unsigned short target_num;
 	unsigned int wgt = 0, pref_wgt = 0;
-	unsigned int func_code;
+	unsigned int func_code, domain;
 	struct ap_message ap_msg;
 	int cpen, qpen, qid = 0, rc = -ENODEV;
 	struct module *mod;
@@ -1059,7 +1059,7 @@ static long _zcrypt_send_ep11_cprb(bool
 		}
 	}
 
-	rc = prep_ep11_ap_msg(userspace, xcrb, &ap_msg, &func_code);
+	rc = prep_ep11_ap_msg(userspace, xcrb, &ap_msg, &func_code, &domain);
 	if (rc)
 		goto out_free;
 
--- a/drivers/s390/crypto/zcrypt_msgtype6.c
+++ b/drivers/s390/crypto/zcrypt_msgtype6.c
@@ -510,7 +510,8 @@ static int XCRB_msg_to_type6CPRB_msgX(bo
 
 static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap_msg,
 					   struct ep11_urb *xcRB,
-					   unsigned int *fcode)
+					   unsigned int *fcode,
+					   unsigned int *domain)
 {
 	unsigned int lfmt;
 	static struct type6_hdr static_type6_ep11_hdr = {
@@ -592,6 +593,8 @@ static int xcrb_msg_to_type6_ep11cprb_ms
 	else
 		ap_msg->flags |= AP_MSG_FLAG_USAGE;
 
+	*domain = msg->cprbx.target_id;
+
 	return 0;
 }
 
@@ -1244,7 +1247,7 @@ out:
  */
 int prep_ep11_ap_msg(bool userspace, struct ep11_urb *xcrb,
 		     struct ap_message *ap_msg,
-		     unsigned int *func_code)
+		     unsigned int *func_code, unsigned int *domain)
 {
 	struct response_type resp_type = {
 		.type = CEXXC_RESPONSE_TYPE_EP11,
@@ -1260,7 +1263,8 @@ int prep_ep11_ap_msg(bool userspace, str
 	ap_msg->private = kmemdup(&resp_type, sizeof(resp_type), GFP_KERNEL);
 	if (!ap_msg->private)
 		return -ENOMEM;
-	return xcrb_msg_to_type6_ep11cprb_msgx(userspace, ap_msg, xcrb, func_code);
+	return xcrb_msg_to_type6_ep11cprb_msgx(userspace, ap_msg, xcrb,
+					       func_code, domain);
 }
 
 /**
--- a/drivers/s390/crypto/zcrypt_msgtype6.h
+++ b/drivers/s390/crypto/zcrypt_msgtype6.h
@@ -99,7 +99,7 @@ int prep_cca_ap_msg(bool userspace, stru
 		    unsigned int *fc, unsigned short **dom);
 int prep_ep11_ap_msg(bool userspace, struct ep11_urb *xcrb,
 		     struct ap_message *ap_msg,
-		     unsigned int *fc);
+		     unsigned int *fc, unsigned int *dom);
 int prep_rng_ap_msg(struct ap_message *ap_msg,
 		    int *fc, unsigned int *dom);