From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Doug Anderson <dianders@chromium.org>,
Peter Hurley <peter@hurleysoftware.com>,
california.l.sullivan@intel.com, "Liakhovetski,
Guennadi" <guennadi.liakhovetski@intel.com>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
jslaby@suse.com, "Brian Norris" <briannorris@chromium.org>,
"open list:ARM/Rockchip SoC..."
<linux-rockchip@lists.infradead.org>,
陈渐飞 <jeffy.chen@rock-chips.com>, 高美才 <eric.gao@rock-chips.com>,
phillip.raffeck@fau.de, anton.wuerfel@fau.de,
yegorslists@googlemail.com, matwey@sai.msu.ru,
tthayer@opensource.altera.com, linux-serial@vger.kernel.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] serial: 8250: Avoid "too much work" from bogus rx timeout interrupt
Date: Mon, 19 Dec 2016 19:33:08 +0200 [thread overview]
Message-ID: <1482168788.9552.100.camel@linux.intel.com> (raw)
In-Reply-To: <CAD=FV=Uzjb9Hcmw462Rr2QG6kpPkuF0ZA1=qoKwxTP4_FdFzrQ@mail.gmail.com>
On Mon, 2016-12-19 at 09:12 -0800, Doug Anderson wrote:
> Hi,
>
> On Mon, Dec 19, 2016 at 4:59 AM, Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> > On Sun, 2016-12-18 at 17:14 -0800, Douglas Anderson wrote:
> > > On a Rockchip rk3399-based board during suspend/resume testing, we
> > > found that we could get the console UART into a state where it
> > > would
> > > print this to the console a lot:
> > > serial8250: too much work for irq42
> >
> > Have you read the following discussion
> > https://www.spinics.net/lists/kernel/msg2059543.html
>
> No, I wasn't aware of that discussion. Yup, basically the exact same
> thing is happening here. Good to know I'm not alone. Any idea if the
> Baytrail UART is also based on DesignWare IP?
Yes. Almost all Intel HW is using DesignWare IP for HS UARTs.
> In that thread, Peter said:
>
> > I think there is every likelihood of spurious RX timeout interrupts
> > tripping this patch, sorry.
> >
> > Unfortunately, I think UART_BUG_ is the only viable possibility.
> > Or perhaps fixing the port type as PORT_8250 (thus disabling the
> > fifos).
>
> My change is slightly different than California's in that I'm actually
> throwing away the bogus byte and his patch was treating it as a valid
> byte. I don't know if that makes the patch more or less palatable.
We need to test, especially in DMA case.
> I would hate to lose access to the FIFOs just due to this weird corner
> case.
>
> Do we really think there's a case where there's an RX Timeout
> interrupt w/ no "data ready" but that later the data ready will show
> up? Can you quantify how much later you think it will show up? If we
> can quantify how much longer the data will show up in then we should
> probably just do a timeout loop right where I added my patch.
>
> Specifically, here's what's happening today with RX Timeout interrupt
> without "data ready":
>
> 1. We'll get the interrupt
> 2. We won't do _anything_ to service the interrupt.
> 3. We'll return back to serial8250_interrupt(), where we'll keep
> looping until we get "too much work"
> 4. We'll break out, but the interrupt will still be active.
> 5. Go back to #1
>
> ...and since this interrupt will keep firing and firing and firing
> with no delay in-between, we'll effectively lock the CPU up.
And the root cause of that is... ?
> If there are some UARTs that eventually get themselves out of this
> state by asserting "data ready" then the above won't be an "infinite"
> loop but it will effectively be a tight loop where we won't let
> userspace run and won't service other interrupts until we actually get
> the data ready. Since we're already blocking everything else, it
> seems like it might be better to directly loop in
> serial8250_handle_irq() with a timeout of some sort (how long? 100
> us? 1 ms?). Then we if we get the timeout then we can do the read
> and safely work ourselves free.
What I think is that the root cause of this is still unknown and either
above looks like a hack.
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2016-12-19 17:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-19 1:14 [PATCH] serial: 8250: Avoid "too much work" from bogus rx timeout interrupt Douglas Anderson
2016-12-19 12:59 ` Andy Shevchenko
2016-12-19 17:12 ` Doug Anderson
2016-12-19 17:33 ` Andy Shevchenko [this message]
2016-12-19 17:35 ` Andy Shevchenko
2016-12-19 17:54 ` Doug Anderson
2016-12-19 20:18 ` Andy Shevchenko
2016-12-19 21:13 ` Doug Anderson
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=1482168788.9552.100.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=anton.wuerfel@fau.de \
--cc=briannorris@chromium.org \
--cc=california.l.sullivan@intel.com \
--cc=dianders@chromium.org \
--cc=eric.gao@rock-chips.com \
--cc=gregkh@linuxfoundation.org \
--cc=guennadi.liakhovetski@intel.com \
--cc=jeffy.chen@rock-chips.com \
--cc=jslaby@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-serial@vger.kernel.org \
--cc=matwey@sai.msu.ru \
--cc=peter@hurleysoftware.com \
--cc=phillip.raffeck@fau.de \
--cc=tthayer@opensource.altera.com \
--cc=yegorslists@googlemail.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.