Commit 9a84d616 authored by Tomas Winkler's avatar Tomas Winkler Committed by Greg Kroah-Hartman

mei: don't mix read and write slots

Do not pass read slots pointer into function
mei_irq_thread_write_handler, the write
slots management is handled internally in the write
handler
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 24c656e5
...@@ -901,27 +901,27 @@ static int mei_irq_thread_read_handler(struct mei_cl_cb *cmpl_list, ...@@ -901,27 +901,27 @@ static int mei_irq_thread_read_handler(struct mei_cl_cb *cmpl_list,
* mei_irq_thread_write_handler - bottom half write routine after * mei_irq_thread_write_handler - bottom half write routine after
* ISR to handle the write processing. * ISR to handle the write processing.
* *
* @cmpl_list: An instance of our list structure
* @dev: the device structure * @dev: the device structure
* @slots: slots to write. * @cmpl_list: An instance of our list structure
* *
* returns 0 on success, <0 on failure. * returns 0 on success, <0 on failure.
*/ */
static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, static int mei_irq_thread_write_handler(struct mei_device *dev,
struct mei_device *dev, s32 *slots) struct mei_cl_cb *cmpl_list)
{ {
struct mei_cl *cl; struct mei_cl *cl;
struct mei_cl_cb *pos = NULL, *next = NULL; struct mei_cl_cb *pos = NULL, *next = NULL;
struct mei_cl_cb *list; struct mei_cl_cb *list;
s32 slots;
int ret; int ret;
if (!mei_hbuf_is_empty(dev)) { if (!mei_hbuf_is_empty(dev)) {
dev_dbg(&dev->pdev->dev, "host buffer is not empty.\n"); dev_dbg(&dev->pdev->dev, "host buffer is not empty.\n");
return 0; return 0;
} }
*slots = mei_hbuf_empty_slots(dev); slots = mei_hbuf_empty_slots(dev);
if (*slots <= 0) if (slots <= 0)
return -EMSGSIZE; return -EMSGSIZE;
/* complete all waiting for write CB */ /* complete all waiting for write CB */
...@@ -945,7 +945,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -945,7 +945,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
if (cl == &dev->iamthif_cl) { if (cl == &dev->iamthif_cl) {
dev_dbg(&dev->pdev->dev, "check iamthif flow control.\n"); dev_dbg(&dev->pdev->dev, "check iamthif flow control.\n");
if (dev->iamthif_flow_control_pending) { if (dev->iamthif_flow_control_pending) {
ret = mei_amthif_irq_read(dev, slots); ret = mei_amthif_irq_read(dev, &slots);
if (ret) if (ret)
return ret; return ret;
} }
...@@ -960,7 +960,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -960,7 +960,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
if (dev->wr_ext_msg.hdr.length) { if (dev->wr_ext_msg.hdr.length) {
mei_write_message(dev, &dev->wr_ext_msg.hdr, mei_write_message(dev, &dev->wr_ext_msg.hdr,
dev->wr_ext_msg.data, dev->wr_ext_msg.hdr.length); dev->wr_ext_msg.data, dev->wr_ext_msg.hdr.length);
*slots -= mei_data2slots(dev->wr_ext_msg.hdr.length); slots -= mei_data2slots(dev->wr_ext_msg.hdr.length);
dev->wr_ext_msg.hdr.length = 0; dev->wr_ext_msg.hdr.length = 0;
} }
if (dev->dev_state == MEI_DEV_ENABLED) { if (dev->dev_state == MEI_DEV_ENABLED) {
...@@ -974,9 +974,9 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -974,9 +974,9 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
dev->wd_pending = false; dev->wd_pending = false;
if (dev->wd_state == MEI_WD_RUNNING) if (dev->wd_state == MEI_WD_RUNNING)
*slots -= mei_data2slots(MEI_WD_START_MSG_SIZE); slots -= mei_data2slots(MEI_WD_START_MSG_SIZE);
else else
*slots -= mei_data2slots(MEI_WD_STOP_MSG_SIZE); slots -= mei_data2slots(MEI_WD_STOP_MSG_SIZE);
} }
} }
...@@ -991,14 +991,16 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -991,14 +991,16 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
switch (pos->fop_type) { switch (pos->fop_type) {
case MEI_FOP_CLOSE: case MEI_FOP_CLOSE:
/* send disconnect message */ /* send disconnect message */
ret = _mei_irq_thread_close(dev, slots, pos, cl, cmpl_list); ret = _mei_irq_thread_close(dev, &slots, pos,
cl, cmpl_list);
if (ret) if (ret)
return ret; return ret;
break; break;
case MEI_FOP_READ: case MEI_FOP_READ:
/* send flow control message */ /* send flow control message */
ret = _mei_irq_thread_read(dev, slots, pos, cl, cmpl_list); ret = _mei_irq_thread_read(dev, &slots, pos,
cl, cmpl_list);
if (ret) if (ret)
return ret; return ret;
...@@ -1007,7 +1009,8 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -1007,7 +1009,8 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
/* connect message */ /* connect message */
if (mei_other_client_is_connecting(dev, cl)) if (mei_other_client_is_connecting(dev, cl))
continue; continue;
ret = _mei_irq_thread_ioctl(dev, slots, pos, cl, cmpl_list); ret = _mei_irq_thread_ioctl(dev, &slots, pos,
cl, cmpl_list);
if (ret) if (ret)
return ret; return ret;
...@@ -1032,7 +1035,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -1032,7 +1035,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
cl->host_client_id); cl->host_client_id);
continue; continue;
} }
ret = mei_irq_thread_write_complete(dev, slots, pos, ret = mei_irq_thread_write_complete(dev, &slots, pos,
cmpl_list); cmpl_list);
if (ret) if (ret)
return ret; return ret;
...@@ -1046,7 +1049,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, ...@@ -1046,7 +1049,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
cl->host_client_id); cl->host_client_id);
continue; continue;
} }
ret = mei_amthif_irq_write_complete(dev, slots, ret = mei_amthif_irq_write_complete(dev, &slots,
pos, cmpl_list); pos, cmpl_list);
if (ret) if (ret)
return ret; return ret;
...@@ -1238,7 +1241,7 @@ irqreturn_t mei_interrupt_thread_handler(int irq, void *dev_id) ...@@ -1238,7 +1241,7 @@ irqreturn_t mei_interrupt_thread_handler(int irq, void *dev_id)
if (rets) if (rets)
goto end; goto end;
} }
rets = mei_irq_thread_write_handler(&complete_list, dev, &slots); rets = mei_irq_thread_write_handler(dev, &complete_list);
end: end:
dev_dbg(&dev->pdev->dev, "end of bottom half function.\n"); dev_dbg(&dev->pdev->dev, "end of bottom half function.\n");
dev->host_hw_state = mei_hcsr_read(dev); dev->host_hw_state = mei_hcsr_read(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment