Message ID | 20231129145404.263764-4-akrowiak@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | a couple of corrections to the IRQ enablement function | expand |
Am 29.11.23 um 15:54 schrieb Tony Krowiak: > Let's improve the vfio_ap driver's reaction to reception of response code > 07 from the PQAP(AQIC) command when enabling interrupts on behalf of a > guest: > > * Unregister the guest's ISC before the pages containing the notification > indicator bytes are unpinned. > > * Capture the return code from the kvm_s390_gisc_unregister function and > log a DBF warning if it fails. > > Suggested-by: Matthew Rosato <mjrosato@linux.ibm.com> > Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com> > Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com> Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com> should go via the s390 tree > --- > drivers/s390/crypto/vfio_ap_ops.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c > index 25d7ce2094f8..4e80c211ba47 100644 > --- a/drivers/s390/crypto/vfio_ap_ops.c > +++ b/drivers/s390/crypto/vfio_ap_ops.c > @@ -476,8 +476,11 @@ static struct ap_queue_status vfio_ap_irq_enable(struct vfio_ap_queue *q, > break; > case AP_RESPONSE_OTHERWISE_CHANGED: > /* We could not modify IRQ settings: clear new configuration */ > + ret = kvm_s390_gisc_unregister(kvm, isc); > + if (ret) > + VFIO_AP_DBF_WARN("%s: kvm_s390_gisc_unregister: rc=%d isc=%d, apqn=%#04x\n", > + __func__, ret, isc, q->apqn); > vfio_unpin_pages(&q->matrix_mdev->vdev, nib, 1); > - kvm_s390_gisc_unregister(kvm, isc); > break; > default: > pr_warn("%s: apqn %04x: response: %02x\n", __func__, q->apqn,
diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c index 25d7ce2094f8..4e80c211ba47 100644 --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -476,8 +476,11 @@ static struct ap_queue_status vfio_ap_irq_enable(struct vfio_ap_queue *q, break; case AP_RESPONSE_OTHERWISE_CHANGED: /* We could not modify IRQ settings: clear new configuration */ + ret = kvm_s390_gisc_unregister(kvm, isc); + if (ret) + VFIO_AP_DBF_WARN("%s: kvm_s390_gisc_unregister: rc=%d isc=%d, apqn=%#04x\n", + __func__, ret, isc, q->apqn); vfio_unpin_pages(&q->matrix_mdev->vdev, nib, 1); - kvm_s390_gisc_unregister(kvm, isc); break; default: pr_warn("%s: apqn %04x: response: %02x\n", __func__, q->apqn,