s390/zcrypt: use spin_lock_bh for all queue locks and unlocks.
authorHarald Freudenberger <freude@linux.vnet.ibm.com>
Mon, 16 Jan 2017 08:43:29 +0000 (09:43 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 31 Jan 2017 09:46:15 +0000 (10:46 +0100)
During tests the Kernel complained about inconsistend lock state:
inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
Now all the queue locks use spin_lock_bh/spin_unlock_bh.

Signed-off-by: Harald Freudenberger <freude@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/crypto/zcrypt_api.c

index 919f7aa5a09aded267c2549181247c3f3db957c1..926169c3d9b96a7b69841568c00d6207cf582d56 100644 (file)
@@ -668,6 +668,7 @@ static void zcrypt_qdepth_mask(char qdepth[AP_DEVICES])
 
        memset(qdepth, 0, sizeof(char)  * AP_DEVICES);
        spin_lock(&zcrypt_list_lock);
+       local_bh_disable();
        for_each_zcrypt_card(zc) {
                for_each_zcrypt_queue(zq, zc) {
                        if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index)
@@ -679,6 +680,7 @@ static void zcrypt_qdepth_mask(char qdepth[AP_DEVICES])
                        spin_unlock(&zq->queue->lock);
                }
        }
+       local_bh_enable();
        spin_unlock(&zcrypt_list_lock);
 }
 
@@ -689,6 +691,7 @@ static void zcrypt_perdev_reqcnt(int reqcnt[AP_DEVICES])
 
        memset(reqcnt, 0, sizeof(int) * AP_DEVICES);
        spin_lock(&zcrypt_list_lock);
+       local_bh_disable();
        for_each_zcrypt_card(zc) {
                for_each_zcrypt_queue(zq, zc) {
                        if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index)
@@ -699,6 +702,7 @@ static void zcrypt_perdev_reqcnt(int reqcnt[AP_DEVICES])
                        spin_unlock(&zq->queue->lock);
                }
        }
+       local_bh_enable();
        spin_unlock(&zcrypt_list_lock);
 }
 
@@ -710,6 +714,7 @@ static int zcrypt_pendingq_count(void)
 
        pendingq_count = 0;
        spin_lock(&zcrypt_list_lock);
+       local_bh_disable();
        for_each_zcrypt_card(zc) {
                for_each_zcrypt_queue(zq, zc) {
                        if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index)
@@ -719,6 +724,7 @@ static int zcrypt_pendingq_count(void)
                        spin_unlock(&zq->queue->lock);
                }
        }
+       local_bh_enable();
        spin_unlock(&zcrypt_list_lock);
        return pendingq_count;
 }
@@ -731,6 +737,7 @@ static int zcrypt_requestq_count(void)
 
        requestq_count = 0;
        spin_lock(&zcrypt_list_lock);
+       local_bh_disable();
        for_each_zcrypt_card(zc) {
                for_each_zcrypt_queue(zq, zc) {
                        if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index)
@@ -740,6 +747,7 @@ static int zcrypt_requestq_count(void)
                        spin_unlock(&zq->queue->lock);
                }
        }
+       local_bh_enable();
        spin_unlock(&zcrypt_list_lock);
        return requestq_count;
 }