s390/vfio_ap: verify ZAPQ completion after return of response code zero
authorTony Krowiak <akrowiak@linux.ibm.com>
Wed, 18 Jan 2023 20:31:09 +0000 (15:31 -0500)
committerHeiko Carstens <hca@linux.ibm.com>
Sun, 22 Jan 2023 17:42:36 +0000 (18:42 +0100)
Verification that the asynchronous ZAPQ function has completed only needs
to be done when the response code indicates the function was successfully
initiated; so, let's call the apq_reset_check function immediately after
the response code zero is returned from the ZAPQ.

Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
Reviewed-by: Jason J. Herne <jjherne@linux.ibm.com>
Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Link: https://lore.kernel.org/r/20230118203111.529766-5-akrowiak@linux.ibm.com
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
drivers/s390/crypto/vfio_ap_ops.c

index bc9a814..6ed9fe7 100644 (file)
@@ -1656,6 +1656,9 @@ retry_zapq:
        switch (status.response_code) {
        case AP_RESPONSE_NORMAL:
                ret = 0;
+               /* if the reset has not completed, wait for it to take effect */
+               if (!status.queue_empty || status.irq_enabled)
+                       ret = apq_reset_check(q);
                break;
        case AP_RESPONSE_RESET_IN_PROGRESS:
                /*
@@ -1685,10 +1688,6 @@ retry_zapq:
                return -EIO;
        }
 
-       /* wait for the reset to take effect */
-       if (!(status.queue_empty && !status.irq_enabled))
-               ret = apq_reset_check(q);
-
 free_resources:
        vfio_ap_free_aqic_resources(q);