s390/ap: show APFS value on error reply 0x8B
authorHarald Freudenberger <freude@linux.ibm.com>
Tue, 12 Sep 2023 07:02:07 +0000 (09:02 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 16 Oct 2023 11:04:09 +0000 (13:04 +0200)
With Secure Execution the error reply RX 0x8B now carries
an APFS value indicating why the request has been filtered
by a lower layer of the firmware. So display this value
as a warning line in the s390 debug feature trace.

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Holger Dengler <dengler@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
drivers/s390/crypto/zcrypt_error.h

index d36177e65a3ddc9fb2b667eb32c790488b8e484a..a44fcfcec9387820951bdf5eeab0014e5c14c042 100644 (file)
@@ -98,8 +98,22 @@ static inline int convert_error(struct zcrypt_queue *zq,
        case REP88_ERROR_MESSAGE_MALFORMD:       /* 0x22 */
        case REP88_ERROR_KEY_TYPE:               /* 0x34 */
                /* RY indicates malformed request */
-               ZCRYPT_DBF_WARN("%s dev=%02x.%04x RY=0x%02x => rc=EINVAL\n",
-                               __func__, card, queue, ehdr->reply_code);
+               if (ehdr->reply_code == REP82_ERROR_FILTERED_BY_HYPERVISOR &&
+                   ehdr->type == TYPE86_RSP_CODE) {
+                       struct {
+                               struct type86_hdr hdr;
+                               struct type86_fmt2_ext fmt2;
+                       } __packed * head = reply->msg;
+                       unsigned int apfs = *((u32 *)head->fmt2.apfs);
+
+                       ZCRYPT_DBF_WARN("%s dev=%02x.%04x RY=0x%02x apfs=0x%x => rc=EINVAL\n",
+                                       __func__, card, queue,
+                                       ehdr->reply_code, apfs);
+               } else {
+                       ZCRYPT_DBF_WARN("%s dev=%02x.%04x RY=0x%02x => rc=EINVAL\n",
+                                       __func__, card, queue,
+                                       ehdr->reply_code);
+               }
                return -EINVAL;
        case REP82_ERROR_MACHINE_FAILURE:        /* 0x10 */
        case REP82_ERROR_MESSAGE_TYPE:           /* 0x20 */