spi: fsl-lpspi: use wait_for_completion_timeout() while waiting transfer done
authorGao Pan <pandy.gao@nxp.com>
Mon, 28 Nov 2016 03:02:59 +0000 (11:02 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 30 Nov 2016 17:45:51 +0000 (17:45 +0000)
It's a potential problem to use wait_for_completion() because the
completion condition may never come. Thus, it's better to repalce
wait_for_completion() with wait_for_completion_timeout().

Signed-off-by: Gao Pan <pandy.gao@nxp.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-fsl-lpspi.c

index 539c971b9f05e5702e1e39a9d02e4b3973a65bec..47a97add063924ca11de3c054f454a4f4af198e0 100644 (file)
@@ -348,7 +348,12 @@ static int fsl_lpspi_transfer_one(struct spi_master *master,
 
        reinit_completion(&fsl_lpspi->xfer_done);
        fsl_lpspi_write_tx_fifo(fsl_lpspi);
-       wait_for_completion(&fsl_lpspi->xfer_done);
+
+       ret = wait_for_completion_timeout(&fsl_lpspi->xfer_done, HZ);
+       if (!ret) {
+               dev_dbg(fsl_lpspi->dev, "wait for completion timeout\n");
+               return -ETIMEDOUT;
+       }
 
        ret = fsl_lpspi_txfifo_empty(fsl_lpspi);
        fsl_lpspi_read_rx_fifo(fsl_lpspi);