]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
s390/zcrypt: Rework debug feature invocations.
authorHarald Freudenberger <freude@linux.vnet.ibm.com>
Thu, 24 Nov 2016 05:45:21 +0000 (06:45 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 14 Dec 2016 15:33:39 +0000 (16:33 +0100)
Rework the debug feature calls and initialization.  There
are now two debug feature entries used by the zcrypt code.
The first is 'ap' with all the AP bus related stuff and the
second is 'zcrypt' with all the zcrypt and devices and
driver related entries. However, there isn't much traffic on
both debug features. The ap bus code emits only some debug
info and for zcrypt devices on appearance and disappearance
there is an entry written.

The new dbf invocations use the sprintf buffer layout,
whereas the old implementation used the ascii dbf buffer.
There are now 5*8=40 bytes used for each entry, resulting in
5 parameters per call. As the sprintf buffer needs a format
string the first parameter provides this and so up to 4 more
parameters can be used. Alltogehter the new layout should be
much more human readable for customers and test.

Signed-off-by: Harald Freudenberger <freude@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/crypto/ap_bus.c
drivers/s390/crypto/ap_debug.h [new file with mode: 0644]
drivers/s390/crypto/zcrypt_api.c
drivers/s390/crypto/zcrypt_api.h
drivers/s390/crypto/zcrypt_card.c
drivers/s390/crypto/zcrypt_debug.h
drivers/s390/crypto/zcrypt_error.h
drivers/s390/crypto/zcrypt_msgtype50.c
drivers/s390/crypto/zcrypt_msgtype6.c
drivers/s390/crypto/zcrypt_queue.c

index 78c99ae42b1f9081ec3c0a165bb6a494dbdb6e51..6d75984a3d85f29c464ddcc384839968a6633fb2 100644 (file)
 #include <asm/facility.h>
 #include <linux/crypto.h>
 #include <linux/mod_devicetable.h>
+#include <linux/debugfs.h>
 
 #include "ap_bus.h"
 #include "ap_asm.h"
+#include "ap_debug.h"
 
 /*
  * Module description.
@@ -81,6 +83,12 @@ LIST_HEAD(ap_card_list);
 static struct ap_config_info *ap_configuration;
 static bool initialised;
 
+/*
+ * AP bus related debug feature things.
+ */
+static struct dentry *ap_dbf_root;
+debug_info_t *ap_dbf_info;
+
 /*
  * Workqueue timer for bus rescan.
  */
@@ -568,6 +576,8 @@ static int ap_dev_resume(struct device *dev)
 
 static void ap_bus_suspend(void)
 {
+       AP_DBF(DBF_DEBUG, "ap_bus_suspend running\n");
+
        ap_suspend_flag = 1;
        /*
         * Disable scanning for devices, thus we do not want to scan
@@ -603,6 +613,8 @@ static void ap_bus_resume(void)
 {
        int rc;
 
+       AP_DBF(DBF_DEBUG, "ap_bus_resume running\n");
+
        /* remove all queue devices */
        bus_for_each_dev(&ap_bus_type, NULL, NULL,
                         __ap_queue_devices_unregister);
@@ -742,6 +754,9 @@ static ssize_t ap_domain_store(struct bus_type *bus,
        spin_lock_bh(&ap_domain_lock);
        ap_domain_index = domain;
        spin_unlock_bh(&ap_domain_lock);
+
+       AP_DBF(DBF_DEBUG, "store new default domain=%d\n", domain);
+
        return count;
 }
 
@@ -964,6 +979,8 @@ static void ap_scan_bus(struct work_struct *unused)
        unsigned int functions = 0;
        int rc, id, dom, borked, domains;
 
+       AP_DBF(DBF_DEBUG, "ap_scan_bus running\n");
+
        ap_query_configuration();
        if (ap_select_domain() != 0)
                goto out;
@@ -1129,6 +1146,23 @@ static struct reset_call ap_reset_call = {
        .fn = ap_reset_all,
 };
 
+int __init ap_debug_init(void)
+{
+       ap_dbf_root = debugfs_create_dir("ap", NULL);
+       ap_dbf_info = debug_register("ap", 1, 1,
+                                    DBF_MAX_SPRINTF_ARGS * sizeof(long));
+       debug_register_view(ap_dbf_info, &debug_sprintf_view);
+       debug_set_level(ap_dbf_info, DBF_ERR);
+
+       return 0;
+}
+
+void ap_debug_exit(void)
+{
+       debugfs_remove(ap_dbf_root);
+       debug_unregister(ap_dbf_info);
+}
+
 /**
  * ap_module_init(): The module initialization code.
  *
@@ -1139,6 +1173,10 @@ int __init ap_module_init(void)
        int max_domain_id;
        int rc, i;
 
+       rc = ap_debug_init();
+       if (rc)
+               return rc;
+
        if (ap_instructions_available() != 0) {
                pr_warn("The hardware system does not support AP instructions\n");
                return -ENODEV;
@@ -1266,6 +1304,8 @@ void ap_module_exit(void)
        unregister_reset_call(&ap_reset_call);
        if (ap_using_interrupts())
                unregister_adapter_interrupt(&ap_airq);
+
+       ap_debug_exit();
 }
 
 module_init(ap_module_init);
diff --git a/drivers/s390/crypto/ap_debug.h b/drivers/s390/crypto/ap_debug.h
new file mode 100644 (file)
index 0000000..78dbff8
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Copyright IBM Corp. 2016
+ *  Author(s): Harald Freudenberger <freude@de.ibm.com>
+ */
+#ifndef AP_DEBUG_H
+#define AP_DEBUG_H
+
+#include <asm/debug.h>
+
+#define DBF_ERR                3       /* error conditions   */
+#define DBF_WARN       4       /* warning conditions */
+#define DBF_INFO       5       /* informational      */
+#define DBF_DEBUG      6       /* for debugging only */
+
+#define RC2ERR(rc) ((rc) ? DBF_ERR : DBF_INFO)
+#define RC2WARN(rc) ((rc) ? DBF_WARN : DBF_INFO)
+
+#define DBF_MAX_SPRINTF_ARGS 5
+
+#define AP_DBF(...)                                    \
+       debug_sprintf_event(ap_dbf_info, ##__VA_ARGS__)
+
+extern debug_info_t *ap_dbf_info;
+
+int ap_debug_init(void);
+void ap_debug_exit(void);
+
+#endif /* AP_DEBUG_H */
index 71e298fe339f17d2379f93c7f9c63d10d0df2a68..7ca25e77bd6adbb224e774c8f63e82b93ecb277b 100644 (file)
@@ -41,8 +41,8 @@
 #include <linux/debugfs.h>
 #include <asm/debug.h>
 
-#include "zcrypt_debug.h"
 #include "zcrypt_api.h"
+#include "zcrypt_debug.h"
 
 #include "zcrypt_msgtype6.h"
 #include "zcrypt_msgtype50.h"
@@ -71,10 +71,9 @@ EXPORT_SYMBOL(zcrypt_rescan_req);
 
 static LIST_HEAD(zcrypt_ops_list);
 
-static struct dentry *debugfs_root;
-debug_info_t *zcrypt_dbf_common;
-debug_info_t *zcrypt_dbf_devices;
-debug_info_t *zcrypt_dbf_cards;
+/* Zcrypt related debug feature stuff. */
+static struct dentry *zcrypt_dbf_root;
+debug_info_t *zcrypt_dbf_info;
 
 /**
  * Process a rescan of the transport layer.
@@ -87,8 +86,8 @@ static inline int zcrypt_process_rescan(void)
                atomic_set(&zcrypt_rescan_req, 0);
                atomic_inc(&zcrypt_rescan_count);
                ap_bus_force_rescan();
-               ZCRYPT_DBF_COMMON(DBF_INFO, "rescan%07d",
-                                 atomic_inc_return(&zcrypt_rescan_count));
+               ZCRYPT_DBF(DBF_INFO, "rescan count=%07d",
+                          atomic_inc_return(&zcrypt_rescan_count));
                return 1;
        }
        return 0;
@@ -1363,28 +1362,19 @@ void zcrypt_rng_device_remove(void)
 
 int __init zcrypt_debug_init(void)
 {
-       debugfs_root = debugfs_create_dir("zcrypt", NULL);
-
-       zcrypt_dbf_common = debug_register("zcrypt_common", 1, 1, 16);
-       debug_register_view(zcrypt_dbf_common, &debug_hex_ascii_view);
-       debug_set_level(zcrypt_dbf_common, DBF_ERR);
-
-       zcrypt_dbf_devices = debug_register("zcrypt_devices", 1, 1, 16);
-       debug_register_view(zcrypt_dbf_devices, &debug_hex_ascii_view);
-       debug_set_level(zcrypt_dbf_devices, DBF_ERR);
-
-       zcrypt_dbf_cards = debug_register("zcrypt_cards", 1, 1, 16);
-       debug_register_view(zcrypt_dbf_cards, &debug_hex_ascii_view);
-       debug_set_level(zcrypt_dbf_cards, DBF_ERR);
+       zcrypt_dbf_root = debugfs_create_dir("zcrypt", NULL);
+       zcrypt_dbf_info = debug_register("zcrypt", 1, 1,
+                                        DBF_MAX_SPRINTF_ARGS * sizeof(long));
+       debug_register_view(zcrypt_dbf_info, &debug_sprintf_view);
+       debug_set_level(zcrypt_dbf_info, DBF_ERR);
 
        return 0;
 }
 
 void zcrypt_debug_exit(void)
 {
-       debugfs_remove(debugfs_root);
-       debug_unregister(zcrypt_dbf_common);
-       debug_unregister(zcrypt_dbf_devices);
+       debugfs_remove(zcrypt_dbf_root);
+       debug_unregister(zcrypt_dbf_info);
 }
 
 /**
@@ -1434,9 +1424,9 @@ void __exit zcrypt_api_exit(void)
 {
        remove_proc_entry("driver/z90crypt", NULL);
        misc_deregister(&zcrypt_misc_device);
-       zcrypt_debug_exit();
        zcrypt_msgtype6_exit();
        zcrypt_msgtype50_exit();
+       zcrypt_debug_exit();
 }
 
 module_init(zcrypt_api_init);
index 4fb892b99f41ccfb26796e43ac67a22835f66e6d..274a590515347094b5b27a79efd6607dd50d085b 100644 (file)
@@ -132,8 +132,6 @@ struct zcrypt_card {
        atomic_t load;                  /* Utilization of the crypto device */
 
        int request_count;              /* # current requests. */
-
-       debug_info_t *dbf_area;         /* debugging */
 };
 
 struct zcrypt_queue {
@@ -149,8 +147,6 @@ struct zcrypt_queue {
        int request_count;              /* # current requests. */
 
        struct ap_message reply;        /* Per-device reply structure. */
-
-       debug_info_t *dbf_area;         /* debugging */
 };
 
 /* transport layer rescanning */
@@ -160,10 +156,6 @@ extern spinlock_t zcrypt_list_lock;
 extern int zcrypt_device_count;
 extern struct list_head zcrypt_card_list;
 
-extern debug_info_t *zcrypt_dbf_common;
-extern debug_info_t *zcrypt_dbf_devices;
-extern debug_info_t *zcrypt_dbf_cards;
-
 #define for_each_zcrypt_card(_zc) \
        list_for_each_entry(_zc, &zcrypt_card_list, list)
 
index 57873d775e9564399b07cc10d8d634a6f84370f9..53436ea522305dfd27fa3e89d216d6b1d910ae9e 100644 (file)
@@ -79,7 +79,9 @@ static ssize_t zcrypt_card_online_store(struct device *dev,
 
        zc->online = online;
        id = zc->card->id;
-       ZCRYPT_DBF_DEV(DBF_INFO, zc, "card%02xo%dman", id, online);
+
+       ZCRYPT_DBF(DBF_INFO, "card=%02x online=%d\n", id, online);
+
        spin_lock(&zcrypt_list_lock);
        list_for_each_entry(zq, &zc->zqueues, list)
                zcrypt_queue_force_online(zq, online);
@@ -109,7 +111,6 @@ struct zcrypt_card *zcrypt_card_alloc(void)
                return NULL;
        INIT_LIST_HEAD(&zc->list);
        INIT_LIST_HEAD(&zc->zqueues);
-       zc->dbf_area = zcrypt_dbf_cards;
        kref_init(&zc->refcount);
        return zc;
 }
@@ -160,6 +161,9 @@ int zcrypt_card_register(struct zcrypt_card *zc)
        spin_unlock(&zcrypt_list_lock);
 
        zc->online = 1;
+
+       ZCRYPT_DBF(DBF_INFO, "card=%02x register online=1\n", zc->card->id);
+
        return rc;
 }
 EXPORT_SYMBOL(zcrypt_card_register);
@@ -172,6 +176,8 @@ EXPORT_SYMBOL(zcrypt_card_register);
  */
 void zcrypt_card_unregister(struct zcrypt_card *zc)
 {
+       ZCRYPT_DBF(DBF_INFO, "card=%02x unregister\n", zc->card->id);
+
        spin_lock(&zcrypt_list_lock);
        list_del_init(&zc->list);
        spin_unlock(&zcrypt_list_lock);
index 28d9349de1adf77cf20dbe5f938d6a27afd3eaeb..13e38defb6b8d954ec6587a2f6bf1d9ae418b28b 100644 (file)
@@ -1,51 +1,27 @@
 /*
- *  Copyright IBM Corp. 2012
+ *  Copyright IBM Corp. 2016
  *  Author(s): Holger Dengler (hd@linux.vnet.ibm.com)
+ *            Harald Freudenberger <freude@de.ibm.com>
  */
 #ifndef ZCRYPT_DEBUG_H
 #define ZCRYPT_DEBUG_H
 
 #include <asm/debug.h>
-#include "zcrypt_api.h"
 
-/* that gives us 15 characters in the text event views */
-#define ZCRYPT_DBF_LEN 16
-
-#define DBF_ERR                3       /* error conditions     */
-#define DBF_WARN       4       /* warning conditions   */
-#define DBF_INFO       6       /* informational        */
+#define DBF_ERR                3       /* error conditions   */
+#define DBF_WARN       4       /* warning conditions */
+#define DBF_INFO       5       /* informational      */
+#define DBF_DEBUG      6       /* for debugging only */
 
+#define RC2ERR(rc) ((rc) ? DBF_ERR : DBF_INFO)
 #define RC2WARN(rc) ((rc) ? DBF_WARN : DBF_INFO)
 
-#define ZCRYPT_DBF_COMMON(level, text...) \
-       do { \
-               if (debug_level_enabled(zcrypt_dbf_common, level)) { \
-                       char debug_buffer[ZCRYPT_DBF_LEN]; \
-                       snprintf(debug_buffer, ZCRYPT_DBF_LEN, text); \
-                       debug_text_event(zcrypt_dbf_common, level, \
-                                        debug_buffer); \
-               } \
-       } while (0)
-
-#define ZCRYPT_DBF_DEVICES(level, text...) \
-       do { \
-               if (debug_level_enabled(zcrypt_dbf_devices, level)) { \
-                       char debug_buffer[ZCRYPT_DBF_LEN]; \
-                       snprintf(debug_buffer, ZCRYPT_DBF_LEN, text); \
-                       debug_text_event(zcrypt_dbf_devices, level, \
-                                        debug_buffer); \
-               } \
-       } while (0)
-
-#define ZCRYPT_DBF_DEV(level, device, text...) \
-       do { \
-               if (debug_level_enabled(device->dbf_area, level)) { \
-                       char debug_buffer[ZCRYPT_DBF_LEN]; \
-                       snprintf(debug_buffer, ZCRYPT_DBF_LEN, text); \
-                       debug_text_event(device->dbf_area, level, \
-                                        debug_buffer); \
-               } \
-       } while (0)
+#define DBF_MAX_SPRINTF_ARGS 5
+
+#define ZCRYPT_DBF(...)                                        \
+       debug_sprintf_event(zcrypt_dbf_info, ##__VA_ARGS__)
+
+extern debug_info_t *zcrypt_dbf_info;
 
 int zcrypt_debug_init(void);
 void zcrypt_debug_exit(void);
index 8659788796613e27169e15d6733255476f5349db..13df60209ed33a05604e34e381d40a50b1c40904 100644 (file)
@@ -93,6 +93,8 @@ static inline int convert_error(struct zcrypt_queue *zq,
                                struct ap_message *reply)
 {
        struct error_hdr *ehdr = reply->message;
+       int card = AP_QID_CARD(zq->queue->qid);
+       int queue = AP_QID_QUEUE(zq->queue->qid);
 
        switch (ehdr->reply_code) {
        case REP82_ERROR_OPERAND_INVALID:
@@ -105,6 +107,9 @@ static inline int convert_error(struct zcrypt_queue *zq,
        //   REP88_ERROR_OPERAND                // '84' CEX2A
        //   REP88_ERROR_OPERAND_EVEN_MOD       // '85' CEX2A
                /* Invalid input data. */
+               ZCRYPT_DBF(DBF_WARN,
+                          "device=%02x.%04x reply=0x%02x => rc=EINVAL\n",
+                          card, queue, ehdr->reply_code);
                return -EINVAL;
        case REP82_ERROR_MESSAGE_TYPE:
        //   REP88_ERROR_MESSAGE_TYPE           // '20' CEX2A
@@ -116,12 +121,10 @@ static inline int convert_error(struct zcrypt_queue *zq,
                atomic_set(&zcrypt_rescan_req, 1);
                zq->online = 0;
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
-                      AP_QID_CARD(zq->queue->qid),
-                      AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%drc%d",
-                       AP_QID_CARD(zq->queue->qid),
-                       AP_QID_QUEUE(zq->queue->qid), zq->online,
-                       ehdr->reply_code);
+                      card, queue);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x reply=0x%02x => online=0 rc=EAGAIN\n",
+                          card, queue, ehdr->reply_code);
                return -EAGAIN;
        case REP82_ERROR_TRANSPORT_FAIL:
        case REP82_ERROR_MACHINE_FAILURE:
@@ -130,22 +133,18 @@ static inline int convert_error(struct zcrypt_queue *zq,
                atomic_set(&zcrypt_rescan_req, 1);
                zq->online = 0;
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
-                      AP_QID_CARD(zq->queue->qid),
-                      AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%drc%d",
-                       AP_QID_CARD(zq->queue->qid),
-                       AP_QID_QUEUE(zq->queue->qid), zq->online,
-                       ehdr->reply_code);
+                      card, queue);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x reply=0x%02x => online=0 rc=EAGAIN\n",
+                          card, queue, ehdr->reply_code);
                return -EAGAIN;
        default:
                zq->online = 0;
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
-                      AP_QID_CARD(zq->queue->qid),
-                      AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%drc%d",
-                       AP_QID_CARD(zq->queue->qid),
-                       AP_QID_QUEUE(zq->queue->qid), zq->online,
-                       ehdr->reply_code);
+                      card, queue);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x reply=0x%02x => online=0 rc=EAGAIN\n",
+                          card, queue, ehdr->reply_code);
                return -EAGAIN; /* repeat the request on a different device. */
        }
 }
index a9873b43611568d46bee7eceed3be87631e0e3c7..6dd5d7c58dd08eae4f9d27074328069050f1b179 100644 (file)
@@ -367,11 +367,11 @@ static int convert_type80(struct zcrypt_queue *zq,
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%drc%d",
-                              AP_QID_CARD(zq->queue->qid),
-                              AP_QID_QUEUE(zq->queue->qid),
-                              zq->online, t80h->code);
-
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x code=0x%02x => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          t80h->code);
                return -EAGAIN; /* repeat the request on a different device. */
        }
        if (zq->zcard->user_space_type == ZCRYPT_CEX2A)
@@ -390,7 +390,9 @@ static int convert_response(struct zcrypt_queue *zq,
                            unsigned int outputdatalength)
 {
        /* Response type byte is the second byte in the response. */
-       switch (((unsigned char *) reply->message)[1]) {
+       unsigned char rtype = ((unsigned char *) reply->message)[1];
+
+       switch (rtype) {
        case TYPE82_RSP_CODE:
        case TYPE88_RSP_CODE:
                return convert_error(zq, reply);
@@ -402,10 +404,11 @@ static int convert_response(struct zcrypt_queue *zq,
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%dfail",
-                              AP_QID_CARD(zq->queue->qid),
-                              AP_QID_QUEUE(zq->queue->qid),
-                              zq->online);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x rtype=0x%02x => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          (unsigned int) rtype);
                return -EAGAIN; /* repeat the request on a different device. */
        }
 }
index c6cfb9acec19aa0c50aa8ff33ab45bd7532a31d4..e5563ffeb8398158485e2842502479199608ebff 100644 (file)
@@ -638,30 +638,37 @@ static int convert_type86_ica(struct zcrypt_queue *zq,
        service_rc = msg->cprbx.ccp_rtcode;
        if (unlikely(service_rc != 0)) {
                service_rs = msg->cprbx.ccp_rscode;
-               if (service_rc == 8 && service_rs == 66)
-                       return -EINVAL;
-               if (service_rc == 8 && service_rs == 65)
-                       return -EINVAL;
-               if (service_rc == 8 && service_rs == 770)
+               if ((service_rc == 8 && service_rs == 66) ||
+                   (service_rc == 8 && service_rs == 65) ||
+                   (service_rc == 8 && service_rs == 72) ||
+                   (service_rc == 8 && service_rs == 770) ||
+                   (service_rc == 12 && service_rs == 769)) {
+                       ZCRYPT_DBF(DBF_DEBUG,
+                                  "device=%02x.%04x rc/rs=%d/%d => rc=EINVAL\n",
+                                  AP_QID_CARD(zq->queue->qid),
+                                  AP_QID_QUEUE(zq->queue->qid),
+                                  (int) service_rc, (int) service_rs);
                        return -EINVAL;
+               }
                if (service_rc == 8 && service_rs == 783) {
                        zq->zcard->min_mod_size =
                                PCIXCC_MIN_MOD_SIZE_OLD;
+                       ZCRYPT_DBF(DBF_DEBUG,
+                                  "device=%02x.%04x rc/rs=%d/%d => rc=EAGAIN\n",
+                                  AP_QID_CARD(zq->queue->qid),
+                                  AP_QID_QUEUE(zq->queue->qid),
+                                  (int) service_rc, (int) service_rs);
                        return -EAGAIN;
                }
-               if (service_rc == 12 && service_rs == 769)
-                       return -EINVAL;
-               if (service_rc == 8 && service_rs == 72)
-                       return -EINVAL;
                zq->online = 0;
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%drc%d",
-                              AP_QID_CARD(zq->queue->qid),
-                              AP_QID_QUEUE(zq->queue->qid),
-                              zq->online,
-                              msg->hdr.reply_code);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x rc/rs=%d/%d => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          (int) service_rc, (int) service_rs);
                return -EAGAIN; /* repeat the request on a different device. */
        }
        data = msg->text;
@@ -776,8 +783,7 @@ static int convert_response_ica(struct zcrypt_queue *zq,
 {
        struct type86x_reply *msg = reply->message;
 
-       /* Response type byte is the second byte in the response. */
-       switch (((unsigned char *) reply->message)[1]) {
+       switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
        case TYPE88_RSP_CODE:
                return convert_error(zq, reply);
@@ -803,10 +809,11 @@ static int convert_response_ica(struct zcrypt_queue *zq,
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%dfail",
-                              AP_QID_CARD(zq->queue->qid),
-                              AP_QID_QUEUE(zq->queue->qid),
-                              zq->online);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x rtype=0x%02x => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          (int) msg->hdr.type);
                return -EAGAIN; /* repeat the request on a different device. */
        }
 }
@@ -817,8 +824,7 @@ static int convert_response_xcrb(struct zcrypt_queue *zq,
 {
        struct type86x_reply *msg = reply->message;
 
-       /* Response type byte is the second byte in the response. */
-       switch (((unsigned char *) reply->message)[1]) {
+       switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
        case TYPE88_RSP_CODE:
                xcRB->status = 0x0008044DL; /* HDD_InvalidParm */
@@ -838,10 +844,11 @@ static int convert_response_xcrb(struct zcrypt_queue *zq,
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%dfail",
-                      AP_QID_CARD(zq->queue->qid),
-                      AP_QID_QUEUE(zq->queue->qid),
-                              zq->online);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x rtype=0x%02x => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          (int) msg->hdr.type);
                return -EAGAIN; /* repeat the request on a different device. */
        }
 }
@@ -851,8 +858,7 @@ static int convert_response_ep11_xcrb(struct zcrypt_queue *zq,
 {
        struct type86_ep11_reply *msg = reply->message;
 
-       /* Response type byte is the second byte in the response. */
-       switch (((unsigned char *)reply->message)[1]) {
+       switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
        case TYPE87_RSP_CODE:
                return convert_error(zq, reply);
@@ -867,10 +873,11 @@ static int convert_response_ep11_xcrb(struct zcrypt_queue *zq,
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%dfail",
-                              AP_QID_CARD(zq->queue->qid),
-                              AP_QID_QUEUE(zq->queue->qid),
-                              zq->online);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x rtype=0x%02x => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          (int) msg->hdr.type);
                return -EAGAIN; /* repeat the request on a different device. */
        }
 }
@@ -897,10 +904,11 @@ static int convert_response_rng(struct zcrypt_queue *zq,
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
                       AP_QID_QUEUE(zq->queue->qid));
-               ZCRYPT_DBF_DEV(DBF_ERR, zq, "dev%02x%04xo%dfail",
-                              AP_QID_CARD(zq->queue->qid),
-                              AP_QID_QUEUE(zq->queue->qid),
-                              zq->online);
+               ZCRYPT_DBF(DBF_ERR,
+                          "device=%02x.%04x rtype=0x%02x => online=0 rc=EAGAIN\n",
+                          AP_QID_CARD(zq->queue->qid),
+                          AP_QID_QUEUE(zq->queue->qid),
+                          (int) msg->hdr.type);
                return -EAGAIN; /* repeat the request on a different device. */
        }
 }
index c70b2528d9a3fbc4e07d3d21035aab76f8f4bd0f..a303f3b2c328624ed3bd299372cbb258f02e409a 100644 (file)
@@ -70,9 +70,12 @@ static ssize_t zcrypt_queue_online_store(struct device *dev,
        if (online && !zc->online)
                return -EINVAL;
        zq->online = online;
-       ZCRYPT_DBF_DEV(DBF_INFO, zq, "dev%02x%04xo%dman",
-                      AP_QID_CARD(zq->queue->qid),
-                      AP_QID_QUEUE(zq->queue->qid), online);
+
+       ZCRYPT_DBF(DBF_INFO, "queue=%02x.%04x online=%d\n",
+                  AP_QID_CARD(zq->queue->qid),
+                  AP_QID_QUEUE(zq->queue->qid),
+                  online);
+
        if (!online)
                ap_flush_queue(zq->queue);
        return count;
@@ -109,7 +112,6 @@ struct zcrypt_queue *zcrypt_queue_alloc(size_t max_response_size)
                goto out_free;
        zq->reply.length = max_response_size;
        INIT_LIST_HEAD(&zq->list);
-       zq->dbf_area = zcrypt_dbf_devices;
        kref_init(&zq->refcount);
        return zq;
 
@@ -161,10 +163,10 @@ int zcrypt_queue_register(struct zcrypt_queue *zq)
        zcrypt_card_get(zc);
        zq->zcard = zc;
        zq->online = 1; /* New devices are online by default. */
-       ZCRYPT_DBF_DEV(DBF_INFO, zq, "dev%02x%04xo%dreg",
-                      AP_QID_CARD(zq->queue->qid),
-                      AP_QID_QUEUE(zq->queue->qid),
-                      zq->online);
+
+       ZCRYPT_DBF(DBF_INFO, "queue=%02x.%04x register online=1\n",
+                  AP_QID_CARD(zq->queue->qid), AP_QID_QUEUE(zq->queue->qid));
+
        list_add_tail(&zq->list, &zc->zqueues);
        zcrypt_device_count++;
        spin_unlock(&zcrypt_list_lock);
@@ -205,6 +207,9 @@ void zcrypt_queue_unregister(struct zcrypt_queue *zq)
 {
        struct zcrypt_card *zc;
 
+       ZCRYPT_DBF(DBF_INFO, "queue=%02x.%04x unregister\n",
+                  AP_QID_CARD(zq->queue->qid), AP_QID_QUEUE(zq->queue->qid));
+
        zc = zq->zcard;
        spin_lock(&zcrypt_list_lock);
        list_del_init(&zq->list);