mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
mei: move write cb to completion on credentials failures
commite09ee853c9upstream. The credentials handling was pushed to the write handlers but error handling wasn't done properly. Move write callbacks to completion queue to destroy them and to notify a blocked writer about the failure Fixes:136698e535(mei: push credentials inside the irq write handler) Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5d46c4e9a0
commit
fc322290fc
@@ -1536,7 +1536,7 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
|
||||
|
||||
rets = first_chunk ? mei_cl_tx_flow_ctrl_creds(cl) : 1;
|
||||
if (rets < 0)
|
||||
return rets;
|
||||
goto err;
|
||||
|
||||
if (rets == 0) {
|
||||
cl_dbg(dev, cl, "No flow control credentials: not sending.\n");
|
||||
@@ -1570,11 +1570,8 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
|
||||
cb->buf.size, cb->buf_idx);
|
||||
|
||||
rets = mei_write_message(dev, &mei_hdr, buf->data + cb->buf_idx);
|
||||
if (rets) {
|
||||
cl->status = rets;
|
||||
list_move_tail(&cb->list, &cmpl_list->list);
|
||||
return rets;
|
||||
}
|
||||
if (rets)
|
||||
goto err;
|
||||
|
||||
cl->status = 0;
|
||||
cl->writing_state = MEI_WRITING;
|
||||
@@ -1582,14 +1579,21 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
|
||||
cb->completed = mei_hdr.msg_complete == 1;
|
||||
|
||||
if (first_chunk) {
|
||||
if (mei_cl_tx_flow_ctrl_creds_reduce(cl))
|
||||
return -EIO;
|
||||
if (mei_cl_tx_flow_ctrl_creds_reduce(cl)) {
|
||||
rets = -EIO;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (mei_hdr.msg_complete)
|
||||
list_move_tail(&cb->list, &dev->write_waiting_list.list);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
cl->status = rets;
|
||||
list_move_tail(&cb->list, &cmpl_list->list);
|
||||
return rets;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user