sdio: make the IRQ thread more resilient in the presence of bad states

Currently we print a message about some bad states wrt function IRQ
handlers but return 0 from process_sdio_pending_irqs() nevertheless.
This can lead to an infinite loop as nothing might have cleared the
condition for the pending card interrupt from the host controller by
the time host->ops->enable_sdio_irq(host, 1) is called.

Signed-off-by: Nicolas Pitre <nico@marvell.com>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c
index e786505..3bd3021 100644
--- a/drivers/mmc/core/sdio_irq.c
+++ b/drivers/mmc/core/sdio_irq.c
@@ -45,16 +45,22 @@
 				printk(KERN_WARNING "%s: pending IRQ for "
 					"non-existant function\n",
 					mmc_card_id(card));
+				ret = -EINVAL;
 			} else if (func->irq_handler) {
 				func->irq_handler(func);
 				count++;
-			} else
+			} else {
 				printk(KERN_WARNING "%s: pending IRQ with no handler\n",
 				       sdio_func_id(func));
+				ret = -EINVAL;
+			}
 		}
 	}
 
-	return count;
+	if (count)
+		return count;
+
+	return ret;
 }
 
 static int sdio_irq_thread(void *_host)