From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Frans Klaver <frans.klaver@xsens.com>
Cc: linux-serial@vger.kernel.org, tony@atomide.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org, balbi@ti.com,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v8 00/18] 8250-core based serial driver for OMAP + DMA
Date: Mon, 8 Sep 2014 17:15:01 +0200 [thread overview]
Message-ID: <20140908151501.GA22584@linutronix.de> (raw)
In-Reply-To: <20140908144616.GA22315@ci00147.xsens-tech.local>
* Frans Klaver | 2014-09-08 16:46:18 [+0200]:
>- ncurses based applications (vi, less) don't play nice for me on the
> console with this series. less doesn't show me anything. vi doesn't
> return to console properly.
Can you give a test case
>- I seem seem to get stuck in a "serial8250: too much work for irq%d"
> loop somewhat reliably. We have a rather demanding application with
> typically somewhere between 600 and 1000 byte packets being sent at
> 240Hz (roughly somewhere between 1.5 and 2 Mb/s). We run at baudrate
> 3500k. I get into this "too much work" thing already when running at
> 300 bytes per packet.
Do you get this message also at lower baud rates, say 115200?
What I am trying to understand is why you are spinning in the handler.
_With_ DMA you should hardly get into the serial handler under normal
conditions. Running at 3.5MB/sec should give one byte every 2.8us and
48 Bytes every ~137us. This looks like plenty of time to get out of
the handler. My *guess* is that serial8250_handle_irq() has IIR often
set to timeout and you end up fetching byte after byte.
This patch should protocol when and why you got into the handler.
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index 7111b22de000..59852069e4a0 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -1583,6 +1583,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
status = serial_port_in(port, UART_LSR);
DEBUG_INTR("status = %x...", status);
+ trace_printk("l%d IIR %x LSR %x\n", port->line, iir, status);
if (status & (UART_LSR_DR | UART_LSR_BI)) {
if (up->dma)
@@ -1707,6 +1708,7 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
spin_unlock(&i->lock);
+ trace_printk("%d e\n", irq);
DEBUG_INTR("end.\n");
return IRQ_RETVAL(handled);
>I hope this is of some use to you. I'll do more testing later.
Which SoC do you use and do you have DMA enabled?
>Thanks,
>Frans
Sebastian
WARNING: multiple messages have this Message-ID (diff)
From: bigeasy@linutronix.de (Sebastian Andrzej Siewior)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v8 00/18] 8250-core based serial driver for OMAP + DMA
Date: Mon, 8 Sep 2014 17:15:01 +0200 [thread overview]
Message-ID: <20140908151501.GA22584@linutronix.de> (raw)
In-Reply-To: <20140908144616.GA22315@ci00147.xsens-tech.local>
* Frans Klaver | 2014-09-08 16:46:18 [+0200]:
>- ncurses based applications (vi, less) don't play nice for me on the
> console with this series. less doesn't show me anything. vi doesn't
> return to console properly.
Can you give a test case
>- I seem seem to get stuck in a "serial8250: too much work for irq%d"
> loop somewhat reliably. We have a rather demanding application with
> typically somewhere between 600 and 1000 byte packets being sent at
> 240Hz (roughly somewhere between 1.5 and 2 Mb/s). We run at baudrate
> 3500k. I get into this "too much work" thing already when running at
> 300 bytes per packet.
Do you get this message also at lower baud rates, say 115200?
What I am trying to understand is why you are spinning in the handler.
_With_ DMA you should hardly get into the serial handler under normal
conditions. Running at 3.5MB/sec should give one byte every 2.8us and
48 Bytes every ~137us. This looks like plenty of time to get out of
the handler. My *guess* is that serial8250_handle_irq() has IIR often
set to timeout and you end up fetching byte after byte.
This patch should protocol when and why you got into the handler.
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index 7111b22de000..59852069e4a0 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -1583,6 +1583,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
status = serial_port_in(port, UART_LSR);
DEBUG_INTR("status = %x...", status);
+ trace_printk("l%d IIR %x LSR %x\n", port->line, iir, status);
if (status & (UART_LSR_DR | UART_LSR_BI)) {
if (up->dma)
@@ -1707,6 +1708,7 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
spin_unlock(&i->lock);
+ trace_printk("%d e\n", irq);
DEBUG_INTR("end.\n");
return IRQ_RETVAL(handled);
>I hope this is of some use to you. I'll do more testing later.
Which SoC do you use and do you have DMA enabled?
>Thanks,
>Frans
Sebastian
next prev parent reply other threads:[~2014-09-08 15:15 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-05 19:02 [PATCH v8 00/18] 8250-core based serial driver for OMAP + DMA Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 01/18] tty: serial: 8250_core: provide a function to export uart_8250_port Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 02/18] tty: serial: 8250_core: allow to overwrite & export serial8250_startup() Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 03/18] tty: serial: 8250_core: allow to set ->throttle / ->unthrottle callbacks Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-08 23:33 ` Greg Kroah-Hartman
2014-09-08 23:33 ` Greg Kroah-Hartman
2014-09-09 0:41 ` Tony Lindgren
2014-09-09 0:41 ` Tony Lindgren
2014-09-05 19:02 ` [PATCH 04/18] tty: serial: 8250_core: add run time pm Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 05/18] tty: serial: 8250_core: read only RX if there is something in the FIFO Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 06/18] tty: serial: 8250_core: user the ->line argument as a hint in serial8250_find_match_or_unused() Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 07/18] tty: serial: 8250_core: remove UART_IER_RDI in serial8250_stop_rx() Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 08/18] tty: serial: Add 8250-core based omap driver Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-08 16:39 ` Tony Lindgren
2014-09-08 16:39 ` Tony Lindgren
2014-09-05 19:02 ` [PATCH 09/18] tty: serial: 8250_dma: handle error on TX submit Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 10/18] tty: serial: 8250_dma: enqueue RX dma again on completion Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 11/18] tty: serial: 8250_dma: Add a TX trigger workaround for AM33xx Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-08 16:41 ` Tony Lindgren
2014-09-08 16:41 ` Tony Lindgren
2014-09-08 16:45 ` Sebastian Andrzej Siewior
2014-09-08 16:45 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 12/18] tty: serial: 8250_dma: optimize the xmit path due to UART_BUG_DMA_TX Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 13/18] tty: serial: 8250_dma: keep own book keeping about RX transfers Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 14/18] tty: serial: 8250_dma: handle the when UART response while DMA remains idle Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 15/18] tty: serial: 8250_dma: add pm runtime Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 16/18] arm: dts: am33xx: add DMA properties for UART Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 17/18] arm: dts: dra7: " Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-05 19:02 ` [PATCH 18/18] tty: serial: 8250: omap: add dma support Sebastian Andrzej Siewior
2014-09-05 19:02 ` Sebastian Andrzej Siewior
2014-09-08 14:46 ` [PATCH v8 00/18] 8250-core based serial driver for OMAP + DMA Frans Klaver
2014-09-08 14:46 ` Frans Klaver
2014-09-08 14:46 ` Frans Klaver
2014-09-08 15:15 ` Sebastian Andrzej Siewior [this message]
2014-09-08 15:15 ` Sebastian Andrzej Siewior
2014-09-08 16:33 ` Sebastian Andrzej Siewior
2014-09-08 16:33 ` Sebastian Andrzej Siewior
2014-09-08 18:25 ` Frans Klaver
2014-09-08 18:25 ` Frans Klaver
2014-09-08 18:25 ` Frans Klaver
2014-09-08 18:33 ` Frans Klaver
2014-09-08 18:33 ` Frans Klaver
2014-09-08 18:33 ` Frans Klaver
2014-09-09 19:41 ` Sebastian Andrzej Siewior
2014-09-09 19:41 ` Sebastian Andrzej Siewior
2014-09-10 14:15 ` Frans Klaver
2014-09-10 14:15 ` Frans Klaver
2014-09-10 14:15 ` Frans Klaver
2014-09-10 16:56 ` Sebastian Andrzej Siewior
2014-09-10 16:56 ` Sebastian Andrzej Siewior
2014-09-08 17:40 ` Tony Lindgren
2014-09-08 17:40 ` Tony Lindgren
2014-09-08 17:55 ` Tony Lindgren
2014-09-08 17:55 ` Tony Lindgren
2014-09-09 7:33 ` Sebastian Andrzej Siewior
2014-09-09 7:33 ` Sebastian Andrzej Siewior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140908151501.GA22584@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=balbi@ti.com \
--cc=frans.klaver@xsens.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.