Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/s390/cio/qdio_main.c | 28 +++++++++++++++++++++++-----
+ drivers/s390/cio/qdio_main.c | 28 +++++++++++++++++++++++-----
1 file changed, 23 insertions(+), 5 deletions(-)
-diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
-index 45e810c6ea3ba..6c186bbd84417 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
-@@ -679,8 +679,8 @@ static void qdio_handle_activate_check(struct qdio_irq *irq_ptr,
+@@ -679,8 +679,8 @@ no_handler:
lgr_info_log();
}
{
DBF_DEV_EVENT(DBF_INFO, irq_ptr, "qest irq");
-@@ -688,15 +688,18 @@ static void qdio_establish_handle_irq(struct qdio_irq *irq_ptr, int cstat,
+@@ -688,15 +688,18 @@ static void qdio_establish_handle_irq(st
goto error;
if (dstat & ~(DEV_STAT_DEV_END | DEV_STAT_CHN_END))
goto error;
}
/* qdio interrupt handler */
-@@ -705,7 +708,7 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
+@@ -705,7 +708,7 @@ void qdio_int_handler(struct ccw_device
{
struct qdio_irq *irq_ptr = cdev->private->qdio_data;
struct subchannel_id schid;
if (!intparm || !irq_ptr) {
ccw_device_get_schid(cdev, &schid);
-@@ -725,10 +728,12 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
+@@ -725,10 +728,12 @@ void qdio_int_handler(struct ccw_device
qdio_irq_check_sense(irq_ptr, irb);
cstat = irb->scsw.cmd.cstat;
dstat = irb->scsw.cmd.dstat;
break;
case QDIO_IRQ_STATE_CLEANUP:
qdio_set_state(irq_ptr, QDIO_IRQ_STATE_INACTIVE);
-@@ -742,12 +747,25 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
+@@ -742,12 +747,25 @@ void qdio_int_handler(struct ccw_device
if (cstat || dstat)
qdio_handle_activate_check(irq_ptr, intparm, cstat,
dstat);
+
+ if (rc == -EAGAIN) {
+ DBF_DEV_EVENT(DBF_INFO, irq_ptr, "qint retry");
-+ rc = ccw_device_start(cdev, irq_ptr->ccw, intparm, 0, 0);
++ rc = ccw_device_start(cdev, &irq_ptr->ccw, intparm, 0, 0);
+ if (!rc)
+ return;
+ DBF_ERROR("%4x RETRY ERR", irq_ptr->schid.sch_no);
wake_up(&cdev->private->wait_q);
}
---
-2.43.0
-