* [PATCH v2 0/2] spi: davinci: fix spurious i/o error
@ 2015-12-10 16:29 Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 1/2] " Sekhar Nori
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Sekhar Nori @ 2015-12-10 16:29 UTC (permalink / raw)
To: linux-arm-kernel
This patch series fixes a spurious I/O error with
DaVinci SPI.
v2:
- Update to handle DMA case
- add a patch to use dev_err() for error reporting
Sekhar Nori (2):
spi: davinci: fix spurious i/o error
spi: davinci: use dev_err() for error reporting
drivers/spi/spi-davinci.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
--
2.6.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] spi: davinci: fix spurious i/o error
2015-12-10 16:29 [PATCH v2 0/2] spi: davinci: fix spurious i/o error Sekhar Nori
@ 2015-12-10 16:29 ` Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 2/2] spi: davinci: use dev_err() for error reporting Sekhar Nori
2015-12-17 13:26 ` [PATCH v2 0/2] spi: davinci: fix spurious i/o error Grygorii Strashko
2 siblings, 0 replies; 4+ messages in thread
From: Sekhar Nori @ 2015-12-10 16:29 UTC (permalink / raw)
To: linux-arm-kernel
davinci_spi_bufs() uses wait_for_completion_interruptible()
without bothering to handle -ERESTARTSYS. Due to this,
sometime, it returns prematurely when a signal is received.
Since the return value is never checked, userspace eventually
receives a spurious -EIO.
To fix this, use un-interruptible wait_for_completion_timeout().
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
drivers/spi/spi-davinci.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index 7d3af3eacf57..57d6960a6252 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -703,7 +703,8 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
/* Wait for the transfer to complete */
if (spicfg->io_type != SPI_IO_TYPE_POLL) {
- wait_for_completion_interruptible(&(dspi->done));
+ if (wait_for_completion_timeout(&dspi->done, HZ) == 0)
+ errors = SPIFLG_TIMEOUT_MASK;
} else {
while (dspi->rcount > 0 || dspi->wcount > 0) {
errors = davinci_spi_process_events(dspi);
--
2.6.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] spi: davinci: use dev_err() for error reporting
2015-12-10 16:29 [PATCH v2 0/2] spi: davinci: fix spurious i/o error Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 1/2] " Sekhar Nori
@ 2015-12-10 16:29 ` Sekhar Nori
2015-12-17 13:26 ` [PATCH v2 0/2] spi: davinci: fix spurious i/o error Grygorii Strashko
2 siblings, 0 replies; 4+ messages in thread
From: Sekhar Nori @ 2015-12-10 16:29 UTC (permalink / raw)
To: linux-arm-kernel
Use dev_err() for reporting errors rather than
dev_dbg().
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
drivers/spi/spi-davinci.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index 57d6960a6252..fddb7a3be322 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -477,33 +477,33 @@ static int davinci_spi_check_error(struct davinci_spi *dspi, int int_status)
struct device *sdev = dspi->bitbang.master->dev.parent;
if (int_status & SPIFLG_TIMEOUT_MASK) {
- dev_dbg(sdev, "SPI Time-out Error\n");
+ dev_err(sdev, "SPI Time-out Error\n");
return -ETIMEDOUT;
}
if (int_status & SPIFLG_DESYNC_MASK) {
- dev_dbg(sdev, "SPI Desynchronization Error\n");
+ dev_err(sdev, "SPI Desynchronization Error\n");
return -EIO;
}
if (int_status & SPIFLG_BITERR_MASK) {
- dev_dbg(sdev, "SPI Bit error\n");
+ dev_err(sdev, "SPI Bit error\n");
return -EIO;
}
if (dspi->version == SPI_VERSION_2) {
if (int_status & SPIFLG_DLEN_ERR_MASK) {
- dev_dbg(sdev, "SPI Data Length Error\n");
+ dev_err(sdev, "SPI Data Length Error\n");
return -EIO;
}
if (int_status & SPIFLG_PARERR_MASK) {
- dev_dbg(sdev, "SPI Parity Error\n");
+ dev_err(sdev, "SPI Parity Error\n");
return -EIO;
}
if (int_status & SPIFLG_OVRRUN_MASK) {
- dev_dbg(sdev, "SPI Data Overrun error\n");
+ dev_err(sdev, "SPI Data Overrun error\n");
return -EIO;
}
if (int_status & SPIFLG_BUF_INIT_ACTIVE_MASK) {
- dev_dbg(sdev, "SPI Buffer Init Active\n");
+ dev_err(sdev, "SPI Buffer Init Active\n");
return -EBUSY;
}
}
--
2.6.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 0/2] spi: davinci: fix spurious i/o error
2015-12-10 16:29 [PATCH v2 0/2] spi: davinci: fix spurious i/o error Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 1/2] " Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 2/2] spi: davinci: use dev_err() for error reporting Sekhar Nori
@ 2015-12-17 13:26 ` Grygorii Strashko
2 siblings, 0 replies; 4+ messages in thread
From: Grygorii Strashko @ 2015-12-17 13:26 UTC (permalink / raw)
To: linux-arm-kernel
On 12/10/2015 06:29 PM, Sekhar Nori wrote:
> This patch series fixes a spurious I/O error with
> DaVinci SPI.
>
> v2:
> - Update to handle DMA case
> - add a patch to use dev_err() for error reporting
>
> Sekhar Nori (2):
> spi: davinci: fix spurious i/o error
> spi: davinci: use dev_err() for error reporting
>
> drivers/spi/spi-davinci.c | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
>
Looks good:
Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com>
--
regards,
-grygorii
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-12-17 13:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-10 16:29 [PATCH v2 0/2] spi: davinci: fix spurious i/o error Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 1/2] " Sekhar Nori
2015-12-10 16:29 ` [PATCH v2 2/2] spi: davinci: use dev_err() for error reporting Sekhar Nori
2015-12-17 13:26 ` [PATCH v2 0/2] spi: davinci: fix spurious i/o error Grygorii Strashko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).