mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
s390/qeth: lock read device while queueing next buffer
[ Upstream commit 17bf8c9b3d ]
For calling ccw_device_start(), issue_next_read() needs to hold the
device's ccwlock.
This is satisfied for the IRQ handler path (where qeth_irq() gets called
under the ccwlock), but we need explicit locking for the initial call by
the MPC initialization.
Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f9b4ec9fb6
commit
e960fa03f9
@@ -517,8 +517,7 @@ static inline int qeth_is_cq(struct qeth_card *card, unsigned int queue)
|
||||
queue == card->qdio.no_in_queues - 1;
|
||||
}
|
||||
|
||||
|
||||
static int qeth_issue_next_read(struct qeth_card *card)
|
||||
static int __qeth_issue_next_read(struct qeth_card *card)
|
||||
{
|
||||
int rc;
|
||||
struct qeth_cmd_buffer *iob;
|
||||
@@ -549,6 +548,17 @@ static int qeth_issue_next_read(struct qeth_card *card)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int qeth_issue_next_read(struct qeth_card *card)
|
||||
{
|
||||
int ret;
|
||||
|
||||
spin_lock_irq(get_ccwdev_lock(CARD_RDEV(card)));
|
||||
ret = __qeth_issue_next_read(card);
|
||||
spin_unlock_irq(get_ccwdev_lock(CARD_RDEV(card)));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct qeth_reply *qeth_alloc_reply(struct qeth_card *card)
|
||||
{
|
||||
struct qeth_reply *reply;
|
||||
@@ -1174,7 +1184,7 @@ static void qeth_irq(struct ccw_device *cdev, unsigned long intparm,
|
||||
return;
|
||||
if (channel == &card->read &&
|
||||
channel->state == CH_STATE_UP)
|
||||
qeth_issue_next_read(card);
|
||||
__qeth_issue_next_read(card);
|
||||
|
||||
iob = channel->iob;
|
||||
index = channel->buf_no;
|
||||
|
||||
Reference in New Issue
Block a user