linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
To: Grygorii Strashko <grygorii.strashko-l0cyMroinI0@public.gmane.org>
Cc: Felipe Balbi <balbi-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Greg Kroah-Hartman
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>,
	Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>,
	linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] usb: dwc3: omap: Fix imprecise external abort and oops on boot
Date: Thu, 8 Dec 2016 14:57:25 -0800	[thread overview]
Message-ID: <20161208225724.GI4920@atomide.com> (raw)
In-Reply-To: <9cce1e34-2fec-9477-4827-6b4c67920a8a-l0cyMroinI0@public.gmane.org>

* Grygorii Strashko <grygorii.strashko-l0cyMroinI0@public.gmane.org> [161208 13:54]:
> Hi Tony,
> 
> On 12/08/2016 09:37 AM, Tony Lindgren wrote:
> > * Felipe Balbi <balbi-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> [161208 01:45]:
> >> Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> writes:
> >>> Somehow starting with v4.9-rc7 there have been imprecise
> >>
> >> There's nothing touching dwc3 since v4.9-rc5.
> > 
> > Right, nothing obvious has changed. I think it's just a slight timing
> > change in the code that started triggering it.
> > 
> >>> external aborts on omap5-uevm dwc3 controller. I have not been
> >>> able to bisect what exactly triggered this as it does not always
> >>> happen. It seems that something changed with probing that
> >>> now exposes the issue:
> >>>
> >>> Unhandled fault: imprecise external abort (0x1406) at 0x00000000
> >>
> >> hmmm, clock disabled... dwc3-omap shouldn't have pm runtime at all.
> > 
> > It does for the interconnect target module clkctrl register via PM
> > runtime. That's the "usb_otg_ss" module.
> > 
> >>> ...
> >>> PC is at dwc3_omap_interrupt_thread+0x20/0x80
> >>> LR is at irq_thread_fn+0x1c/0x54
> >>> ...
> >>> [<c0989fa8>] (dwc3_omap_interrupt_thread) from [<c038a4d8>]
> >>> (irq_thread_fn+0x1c/0x54)
> >>> [<c038a4d8>] (irq_thread_fn) from [<c038a7b0>] (irq_thread+0x12c/0x1f0)
> >>> [<c038a7b0>] (irq_thread) from [<c035d6f0>] (kthread+0xdc/0xf4)
> >>> [<c035d6f0>] (kthread) from [<c0307d78>] (ret_from_fork+0x14/0x3c)
> >>> ...
> >>>
> >>> Unable to handle kernel paging request at virtual address ffffffec
> >>> ...
> >>> Internal error: Oops: 37 [#2] SMP ARM
> >>> PC is at kthread_data+0x4/0xc
> >>> LR is at irq_thread_dtor+0x28/0xd0
> >>> ...
> >>> [<c035e0b4>] (kthread_data) from [<c038a5dc>] (irq_thread_dtor+0x28/0xd0)
> >>> [<c038a5dc>] (irq_thread_dtor) from [<c035bef0>] (task_work_run+0xb8/0xdc)
> >>> [<c035bef0>] (task_work_run) from [<c03448d4>] (do_exit+0x314/0xa20)
> >>> [<c03448d4>] (do_exit) from [<c030bea8>] (die+0x410/0x474)
> >>> [<c030bea8>] (die) from [<c0301350>] (do_DataAbort+0xb4/0xb8)
> >>> [<c0301350>] (do_DataAbort) from [<c030c578>] (__dabt_svc+0x58/0x80)
> >>> Exception stack(0xee777ec8 to 0xee777f10)
> >>> 7ec0:                   0000014d ee6e6f10 00000034 fc020034 ee6e6f10 ee1eec00
> >>> 7ee0: 00000000 00000000 ee6ec640 c038a4bc 00000000 00000000 00000000 ee777f18
> >>> 7f00: c038a4d8 c0989fa8 60000013 ffffffff
> >>> [<c030c578>] (__dabt_svc) from [<c0989fa8>] (dwc3_omap_interrupt_thread+0x20/0x80)
> >>> [<c0989fa8>] (dwc3_omap_interrupt_thread) from [<c038a4d8>] (irq_thread_fn+0x1c/0x54)
> >>> [<c038a4d8>] (irq_thread_fn) from [<c038a7b0>] (irq_thread+0x12c/0x1f0)
> >>> [<c038a7b0>] (irq_thread) from [<c035d6f0>] (kthread+0xdc/0xf4)
> >>> [<c035d6f0>] (kthread) from [<c0307d78>] (ret_from_fork+0x14/0x3c)
> >>>
> >>> Fix the issue by making sure the dwc3 interrupts are disabled
> >>> before we call devm_request_threaded_irq().
> >>
> >> that should already be the case. Are you sure that register isn't zero
> >> in probe?
> > 
> > Looks like irq0_status = 0 and irqmisc_status = 0x2121. Also just
> > clearing irqmisc with dwc3_omap_write_irqmisc_clr(omap, 0xffffffff)
> > stops the issue from happening.
> > 
> > There is some deferred probing happening but irqmisc is always 0x2121.
> > 
> 
> My assumption is that you have race here between IRQ handler and PM runtime
> in error handling path during deferred probing.
> 
>  Will below change fix issue for you?

I think you figured out why it behaves that way :)

Seems to work based on few boot tests. Probably both should be applied,
my original patch to prevent spurious interrupts before things are
initialized, this to disable interrupts before pm_runtime_suspend()
on exit path:

Tested-by: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>


> diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
> index 29e80cc..dbc21bc 100644
> --- a/drivers/usb/dwc3/dwc3-omap.c
> +++ b/drivers/usb/dwc3/dwc3-omap.c
> @@ -517,12 +517,12 @@ static int dwc3_omap_probe(struct platform_device *pdev)
>         if (ret) {
>                 dev_err(dev, "failed to request IRQ #%d --> %d\n",
>                                 omap->irq, ret);
> -               goto err1;
> +               goto err11;
>         }
>  
>         ret = dwc3_omap_extcon_register(omap);
>         if (ret < 0)
> -               goto err1;
> +               goto err11;
>  
>         ret = of_platform_populate(node, NULL, NULL, dev);
>         if (ret) {
> @@ -538,6 +538,8 @@ static int dwc3_omap_probe(struct platform_device *pdev)
>         extcon_unregister_notifier(omap->edev, EXTCON_USB, &omap->vbus_nb);
>         extcon_unregister_notifier(omap->edev, EXTCON_USB_HOST, &omap->id_nb);
>  
> +err11:
> +       disable_irq(omap->irq);
>  err1:
>         pm_runtime_put_sync(dev);
>         pm_runtime_disable(dev);
> 
> 
> -- 
> regards,
> -grygorii
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2016-12-08 22:57 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-08  3:21 [PATCH] usb: dwc3: omap: Fix imprecise external abort and oops on boot Tony Lindgren
     [not found] ` <20161208032108.21962-1-tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08  9:44   ` Felipe Balbi
     [not found]     ` <87lgvqkb6f.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-12-08 15:37       ` Tony Lindgren
     [not found]         ` <20161208153734.GF4264-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08 17:51           ` Felipe Balbi
     [not found]             ` <87a8c6pavm.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-12-08 18:25               ` Tony Lindgren
     [not found]                 ` <20161208182521.GA4920-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08 18:44                   ` Tony Lindgren
     [not found]                     ` <20161208184425.GB4920-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08 19:09                       ` Tony Lindgren
2016-12-08 19:18                       ` Felipe Balbi
     [not found]                         ` <8737hy8c1s.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-12-08 19:32                           ` Tony Lindgren
     [not found]                             ` <20161208193208.GE4920-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08 20:09                               ` Felipe Balbi
     [not found]                                 ` <87fulyuqs6.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-12-08 20:26                                   ` Tony Lindgren
2016-12-08 19:16                   ` Felipe Balbi
     [not found]                     ` <8760mu8c4m.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-12-08 19:45                       ` Tony Lindgren
     [not found]                         ` <20161208194557.GF4920-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08 20:11                           ` Felipe Balbi
     [not found]                             ` <87d1h2uqny.fsf-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2016-12-08 20:25                               ` Tony Lindgren
2016-12-08 21:54           ` Grygorii Strashko
     [not found]             ` <9cce1e34-2fec-9477-4827-6b4c67920a8a-l0cyMroinI0@public.gmane.org>
2016-12-08 22:57               ` Tony Lindgren [this message]
     [not found]                 ` <20161208225724.GI4920-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-08 23:38                   ` Grygorii Strashko
     [not found]                     ` <2a0ce107-dddb-6c59-8681-677e217e9fac-l0cyMroinI0@public.gmane.org>
2016-12-08 23:55                       ` Tony Lindgren
     [not found]                         ` <20161208235513.GJ4920-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2016-12-09 18:45                           ` Grygorii Strashko
2016-12-09 16:08   ` Roger Quadros
     [not found]     ` <8a94638a-a8fe-88e0-aece-1ed9835df3c6-l0cyMroinI0@public.gmane.org>
2016-12-09 16:28       ` Tony Lindgren

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=20161208225724.GI4920@atomide.com \
    --to=tony-4v6ys6ai5vpbdgjk7y7tuq@public.gmane.org \
    --cc=balbi-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=grygorii.strashko-l0cyMroinI0@public.gmane.org \
    --cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=nsekhar-l0cyMroinI0@public.gmane.org \
    --cc=rogerq-l0cyMroinI0@public.gmane.org \
    /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 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).