aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/mei/hw-me.c9
-rw-r--r--drivers/misc/mei/interrupt.c2
2 files changed, 10 insertions, 1 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 }
diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c
index 2fbf0c0625ed..f38a32addad0 100644
--- a/drivers/misc/mei/interrupt.c
+++ b/drivers/misc/mei/interrupt.c
@@ -351,7 +351,7 @@ int mei_irq_read_handler(struct mei_device *dev,
351 dev_err(&dev->pdev->dev, "less data available than length=%08x.\n", 351 dev_err(&dev->pdev->dev, "less data available than length=%08x.\n",
352 *slots); 352 *slots);
353 /* we can't read the message */ 353 /* we can't read the message */
354 ret = -EBADMSG; 354 ret = -ENODATA;
355 goto end; 355 goto end;
356 } 356 }
357 357