Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751407AbbEBIF6 (ORCPT ); Sat, 2 May 2015 04:05:58 -0400 Received: from www.osadl.org ([62.245.132.105]:52787 "EHLO www.osadl.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750894AbbEBIFu (ORCPT ); Sat, 2 May 2015 04:05:50 -0400 From: Nicholas Mc Guire To: David Woodhouse Cc: Brian Norris , Vinod Koul , Laurent Pinchart , Kuninori Morimoto , Wolfram Sang , Arnd Bergmann , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Nicholas Mc Guire Subject: [PATCH 1/4] mtd: sh_flctl: let flctl_dma_fifo0_transfer return 0 on success Date: Sat, 2 May 2015 09:57:07 +0200 Message-Id: <1430553430-21396-1-git-send-email-hofrat@osadl.org> X-Mailer: git-send-email 1.7.10.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3234 Lines: 96 wait_for_completion_timeout() returns unsigned long not int so the check for <= should be == and the type unsigned long. With that fixup the return value of flctl_dma_fifo0_transfer can be changed to 0 for success. This changes the failure return value for wait_for_completion_timeout to -ETIMEDOUT and implicitly 0 on success by initializing ret to 0. The call-sites are fixed up to check for == 0 rather than > 0 as well. Signed-off-by: Nicholas Mc Guire --- V2: As suggested by Laurent Pinchart the expected success return value is 0 so rather than just fixing up wait_for_completion_timeout return handling the return value of flctl_dma_fifo0_transfer should be adjusted. call sites: read_fiforeg,write_ec_fiforeg assume > 0 == success are fixed up to check for == 0 for success and the comment in flctl_dma_fifo0_transfe /* ret > 0 is success */ return ret; is dropped since returning 0 on success is the expected. Patch was compile tested with ap325rxa_defconfig (implies CONFIG_MTD_NAND_SH_FLCTL=y) Patch is against 4.1-rc1 (localversion-next is -next-20150501) drivers/mtd/nand/sh_flctl.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index c3ce81c..9b032dd 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c @@ -353,7 +353,8 @@ static int flctl_dma_fifo0_transfer(struct sh_flctl *flctl, unsigned long *buf, dma_addr_t dma_addr; dma_cookie_t cookie = -EINVAL; uint32_t reg; - int ret; + int ret = 0; + unsigned long time_left; if (dir == DMA_FROM_DEVICE) { chan = flctl->chan_fifo0_rx; @@ -388,13 +389,14 @@ static int flctl_dma_fifo0_transfer(struct sh_flctl *flctl, unsigned long *buf, goto out; } - ret = + time_left = wait_for_completion_timeout(&flctl->dma_complete, msecs_to_jiffies(3000)); - if (ret <= 0) { + if (time_left == 0) { dmaengine_terminate_all(chan); dev_err(&flctl->pdev->dev, "wait_for_completion_timeout\n"); + ret = -ETIMEDOUT; } out: @@ -404,7 +406,6 @@ out: dma_unmap_single(chan->device->dev, dma_addr, len, dir); - /* ret > 0 is success */ return ret; } @@ -428,7 +429,7 @@ static void read_fiforeg(struct sh_flctl *flctl, int rlen, int offset) /* initiate DMA transfer */ if (flctl->chan_fifo0_rx && rlen >= 32 && - flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_DEV_TO_MEM) > 0) + flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_DEV_TO_MEM) == 0) goto convert; /* DMA success */ /* do polling transfer */ @@ -487,7 +488,7 @@ static void write_ec_fiforeg(struct sh_flctl *flctl, int rlen, /* initiate DMA transfer */ if (flctl->chan_fifo0_tx && rlen >= 32 && - flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_MEM_TO_DEV) > 0) + flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_MEM_TO_DEV) == 0) return; /* DMA success */ /* do polling transfer */ -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/