Commit 7aa7b2a8 authored by Tony Krowiak's avatar Tony Krowiak Committed by Heiko Carstens

s390/vfio-ap: clean up irq resources if possible

The architecture does not specify whether interrupts are disabled as part
of the asynchronous reset or upon return from the PQAP/ZAPQ instruction.
If, however, PQAP/ZAPQ completes with APQSW response code 0 and the
interrupt bit in the status word is also 0, we know the interrupts are
disabled and we can go ahead and clean up the corresponding resources;
otherwise, we must wait until the asynchronous reset has completed.
Signed-off-by: default avatarTony Krowiak <akrowiak@linux.ibm.com>
Suggested-by: default avatarHalil Pasic <pasic@linux.ibm.com>
Reviewed-by: default avatarJason J. Herne <jjherne@linux.ibm.com>
Acked-by: default avatarHalil Pasic <pasic@linux.ibm.com>
Acked-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Tested-by: default avatarViktor Mihajlovski <mihajlov@linux.ibm.com>
Link: https://lore.kernel.org/r/20230815184333.6554-3-akrowiak@linux.ibm.comSigned-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 680b7ddd
......@@ -1654,9 +1654,13 @@ static int vfio_ap_mdev_reset_queue(struct vfio_ap_queue *q)
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)
if (!status.irq_enabled)
vfio_ap_free_aqic_resources(q);
if (!status.queue_empty || status.irq_enabled) {
ret = apq_reset_check(q);
if (status.irq_enabled && ret == 0)
vfio_ap_free_aqic_resources(q);
}
break;
case AP_RESPONSE_RESET_IN_PROGRESS:
/*
......@@ -1675,6 +1679,7 @@ static int vfio_ap_mdev_reset_queue(struct vfio_ap_queue *q)
* completed successfully.
*/
ret = 0;
vfio_ap_free_aqic_resources(q);
break;
default:
WARN(true,
......@@ -1684,8 +1689,6 @@ static int vfio_ap_mdev_reset_queue(struct vfio_ap_queue *q)
return -EIO;
}
vfio_ap_free_aqic_resources(q);
return ret;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment