diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2016-07-29 08:00:27 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-08-08 09:41:34 -0400 |
commit | ddebf6612c5dcc479725867b9fd9a4d98f41350f (patch) | |
tree | 9b3e4bbf7df3c0c8b6260a1a3b08582ce61bf3eb | |
parent | a48ed867153c6d2f6d058267213a82dbd8b6737a (diff) |
s390/qdio: fix double return code evaluation
qdio sometimes checks return codes twice. First with the ccw device's
lock held and then a 2nd time after the lock is released. Simplify
the code by releasing the lock earlier and unify the return code
evaluation.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | drivers/s390/cio/qdio_main.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index b200f27489a7..da969789936d 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c | |||
@@ -1375,13 +1375,10 @@ int qdio_establish(struct qdio_initialize *init_data) | |||
1375 | ccw_device_set_options_mask(cdev, 0); | 1375 | ccw_device_set_options_mask(cdev, 0); |
1376 | 1376 | ||
1377 | rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ESTABLISH, 0, 0); | 1377 | rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ESTABLISH, 0, 0); |
1378 | spin_unlock_irq(get_ccwdev_lock(cdev)); | ||
1378 | if (rc) { | 1379 | if (rc) { |
1379 | DBF_ERROR("%4x est IO ERR", irq_ptr->schid.sch_no); | 1380 | DBF_ERROR("%4x est IO ERR", irq_ptr->schid.sch_no); |
1380 | DBF_ERROR("rc:%4x", rc); | 1381 | DBF_ERROR("rc:%4x", rc); |
1381 | } | ||
1382 | spin_unlock_irq(get_ccwdev_lock(cdev)); | ||
1383 | |||
1384 | if (rc) { | ||
1385 | mutex_unlock(&irq_ptr->setup_mutex); | 1382 | mutex_unlock(&irq_ptr->setup_mutex); |
1386 | qdio_shutdown(cdev, QDIO_FLAG_CLEANUP_USING_CLEAR); | 1383 | qdio_shutdown(cdev, QDIO_FLAG_CLEANUP_USING_CLEAR); |
1387 | return rc; | 1384 | return rc; |
@@ -1447,14 +1444,12 @@ int qdio_activate(struct ccw_device *cdev) | |||
1447 | 1444 | ||
1448 | rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ACTIVATE, | 1445 | rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ACTIVATE, |
1449 | 0, DOIO_DENY_PREFETCH); | 1446 | 0, DOIO_DENY_PREFETCH); |
1447 | spin_unlock_irq(get_ccwdev_lock(cdev)); | ||
1450 | if (rc) { | 1448 | if (rc) { |
1451 | DBF_ERROR("%4x act IO ERR", irq_ptr->schid.sch_no); | 1449 | DBF_ERROR("%4x act IO ERR", irq_ptr->schid.sch_no); |
1452 | DBF_ERROR("rc:%4x", rc); | 1450 | DBF_ERROR("rc:%4x", rc); |
1453 | } | ||
1454 | spin_unlock_irq(get_ccwdev_lock(cdev)); | ||
1455 | |||
1456 | if (rc) | ||
1457 | goto out; | 1451 | goto out; |
1452 | } | ||
1458 | 1453 | ||
1459 | if (is_thinint_irq(irq_ptr)) | 1454 | if (is_thinint_irq(irq_ptr)) |
1460 | tiqdio_add_input_queues(irq_ptr); | 1455 | tiqdio_add_input_queues(irq_ptr); |