aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/hw-me.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/mei/hw-me.c')
-rw-r--r--drivers/misc/mei/hw-me.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c
index 7e769c59a420..7145929cdb51 100644
--- a/drivers/misc/mei/hw-me.c
+++ b/drivers/misc/mei/hw-me.c
@@ -507,7 +507,16 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
507 while (slots > 0) { 507 while (slots > 0) {
508 dev_dbg(&dev->pdev->dev, "slots to read = %08x\n", slots); 508 dev_dbg(&dev->pdev->dev, "slots to read = %08x\n", slots);
509 rets = mei_irq_read_handler(dev, &complete_list, &slots); 509 rets = mei_irq_read_handler(dev, &complete_list, &slots);
510 /* There is a race between ME write and interrupt delivery:
511 * Not all data is always available immediately after the
512 * interrupt, so try to read again on the next interrupt.
513 */
514 if (rets == -ENODATA)
515 break;
516
510 if (rets && dev->dev_state != MEI_DEV_RESETTING) { 517 if (rets && dev->dev_state != MEI_DEV_RESETTING) {
518 dev_err(&dev->pdev->dev, "mei_irq_read_handler ret = %d.\n",
519 rets);
511 schedule_work(&dev->reset_work); 520 schedule_work(&dev->reset_work);
512 goto end; 521 goto end;
513 } 522 }