aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Krowiak <[email protected]>2023-08-15 14:43:25 -0400
committerHeiko Carstens <[email protected]>2023-08-18 15:09:28 +0200
commitc51f8c6bb5c8a4878310d55e3a0b91747954b43d (patch)
treeb35c6856ded6a55f33d39754f6181fa09fde149c
parent411b0109daa52d1cc5be39635631e22a5590c5d8 (diff)
s390/vfio-ap: allow deconfigured queue to be passed through to a guest
When a queue is reset, the status response code returned from the reset operation is stored in the reset_rc field of the vfio_ap_queue structure representing the queue being reset. This field is later used to decide whether the queue should be passed through to a guest. If the reset_rc field is a non-zero value, the queue will be filtered from the list of queues passed through. When an adapter is deconfigured, all queues associated with that adapter are reset. That being the case, it is not necessary to filter those queues; so, if the status response code returned from a reset operation indicates the queue is deconfigured, the reset_rc field of the vfio_ap_queue structure will be set to zero so it will be passed through (i.e., not filtered). Signed-off-by: Tony Krowiak <[email protected]> Reviewed-by: Jason J. Herne <[email protected]> Acked-by: Halil Pasic <[email protected]> Tested-by: Viktor Mihajlovski <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Heiko Carstens <[email protected]>
-rw-r--r--drivers/s390/crypto/vfio_ap_ops.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c
index 3f67cfb53d0c..a489536c508a 100644
--- a/drivers/s390/crypto/vfio_ap_ops.c
+++ b/drivers/s390/crypto/vfio_ap_ops.c
@@ -1677,9 +1677,11 @@ retry_zapq:
case AP_RESPONSE_DECONFIGURED:
/*
* When an AP adapter is deconfigured, the associated
- * queues are reset, so let's return a value indicating the reset
- * completed successfully.
+ * queues are reset, so let's set the status response code to 0
+ * so the queue may be passed through (i.e., not filtered) and
+ * return a value indicating the reset completed successfully.
*/
+ q->reset_rc = 0;
ret = 0;
vfio_ap_free_aqic_resources(q);
break;