Hi Geert-san, Xuan-san, > From: linux-renesas-soc-owner@xxxxxxxxxxxxxxx [mailto:linux-renesas-soc-owner@xxxxxxxxxxxxxxx] On Behalf Of Geert > Uytterhoeven > Sent: Monday, October 24, 2016 6:21 PM > > On Mon, Oct 24, 2016 at 11:13 AM, Xuan Truong Nguyen > <nx-truong@xxxxxxxxxxx> wrote: > >> This is with shmobile_defconfig? > > > > yes. we also attach the configs file we used > > (lager-scif-pio-v4.9-rc2.config) > > > >> Does it work better if you enable CONFIG_SERIAL_SH_SCI_DMA? > > > > yes, it's better a little bit. the kernel does not hangs up, but the warning > > message is output. > > please refer lager-scif-dma.log. > > > > we tested on v4.9-rc2. the issue is the same. > > > > if you need any information, please let us know. > > > WARNING: CPU: 0 PID: 2249 at drivers/dma/sh/rcar-dmac.c:1257 rcar_dmac_tx_status+0x128/0x4 > > No descriptor for cookie! > > > [<c03419e8>] (rcar_dmac_tx_status) from [<c0371e04>] (rx_timer_fn+0x48/0x148) > > > [<c0371dbc>] (rx_timer_fn) from [<c016dedc>] (call_timer_fn+0x2c/0xa0) > > That looks like a race condition between timeout handling and actual completion > of the DMA? I found an issue in sh-sci.c and made a patch to resolve it. But, I'm not sure this is correct way. If this is correct way, we also have to fix dev_dbg() in some functions. Best regards, Yoshihiro Shimoda Since I send this email using Outlook, the patch format may be not good. --- From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> Date: Fri, 28 Oct 2016 16:52:36 +0900 Subject: [PATCH] serial: sh-sci: remove dev_warn() to avoid double spin lock held If we use serial console and CONFIG_SERIAL_SH_SCI_DMA=y, since sci_dma_rx_push() is called with port->lock held and dev_warn() will call serial_console_write() finally, this is possible to call spin_lock{_irqsave}() twice. To avoid this, this patch remove dev_warn() in sci_dma_rx_push(). Reported-by: Xuan Truong Nguyen <nx-truong@xxxxxxxxxxx> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> --- drivers/tty/serial/sh-sci.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index 4b26252..380b5d7 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1142,11 +1142,8 @@ static int sci_dma_rx_push(struct sci_port *s, void *buf, size_t count) int copied; copied = tty_insert_flip_string(tport, buf, count); - if (copied < count) { - dev_warn(port->dev, "Rx overrun: dropping %zu bytes\n", - count - copied); + if (copied < count) port->icount.buf_overrun++; - } port->icount.rx += copied; -- 1.9.1