s390/zcrypt: Provide target domain for EP11 cprbs to scheduling function
authorJürgen Christ <jchrist@linux.ibm.com>
Mon, 10 Jan 2022 12:33:30 +0000 (13:33 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 7 Mar 2022 23:33:00 +0000 (00:33 +0100)
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>
drivers/s390/crypto/zcrypt_api.c
drivers/s390/crypto/zcrypt_msgtype6.c
drivers/s390/crypto/zcrypt_msgtype6.h

index af3e835418863a6a8c34fbe38a2be9701e419bcb..80e2a306709a20ca72d317602bd040cf78fc983a 100644 (file)
@@ -1021,7 +1021,7 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
        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;
@@ -1058,7 +1058,7 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
                }
        }
 
-       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;
 
index be3f46a014f4ec0df763cbba986204ff001dfa3b..57d885158cf000a3eda3cb99abf233be806f3d81 100644 (file)
@@ -510,7 +510,8 @@ static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
 
 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_msgx(bool userspace, struct ap_message *ap
        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, struct ep11_urb *xcrb,
        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);
 }
 
 /*
index ec960d01cca01c64a5603f64e850f6a065bc673f..9da4f4175c44c34be0d24ede059365e511dfb55a 100644 (file)
@@ -99,7 +99,7 @@ int prep_cca_ap_msg(bool userspace, struct ica_xcRB *xcrb,
                    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);