[2/2] mmci: fixup sg buffer handling in mmci_pio_irq.

Message ID 1304594063-19408-1-git-send-email-linus.walleij@stericsson.com
State Not Applicable, archived
Headers show

Commit Message

Linus Walleij May 5, 2011, 11:14 a.m.
From: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>

Earlier code was expecting that mmci_pio_write() returns
not more than 'remain' bytes transferred. It is not the case
for buffers which are not multiple of 4 bytes length.

The patch fix the problem by checking result of mmci_pio_write().

The fault was introduced in the change:
	MMCI: Fixup sg buffer handling in pio_write

Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
 drivers/mmc/host/mmci.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)


diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 6e27433..e238462 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -753,7 +753,10 @@  static irqreturn_t mmci_pio_irq(int irq, void *dev_id)
 		if (status & MCI_TXACTIVE)
 			len = mmci_pio_write(host, buffer, remain, status);
-		sg_miter->consumed = len;
+		if (len > sg_miter->consumed)
+			len = sg_miter->consumed;
+		else
+			sg_miter->consumed = len;
 		host->size -= len;
 		remain -= len;