Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1731033

Re: usb/gadget: stalls in dummy_timer

From Dmitry Torokhov <dmitry.torokhov@gmail.com>
Newsgroups linux.kernel
Subject Re: usb/gadget: stalls in dummy_timer
Date 2017-09-12 19:10 +0200
Message-ID <uoWRc-43L-5@gated-at.bofh.it> (permalink)
References <uouUW-2nI-35@gated-at.bofh.it> <uox6q-3TW-17@gated-at.bofh.it> <uoyFc-57i-29@gated-at.bofh.it> <uoC65-79x-7@gated-at.bofh.it> <uoVBM-37Z-19@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Tue, Sep 12, 2017 at 05:48:51PM +0200, Andrey Konovalov wrote:
> On Mon, Sep 11, 2017 at 8:54 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > On Mon, Sep 11, 2017 at 8:15 AM, Andrey Konovalov <andreyknvl@google.com> wrote:
> >> On Mon, Sep 11, 2017 at 3:25 PM, Alan Stern <stern@rowland.harvard.edu> wrote:
> >>> On Mon, 11 Sep 2017, Andrey Konovalov wrote:
> >>>
> >>>> Hi!
> >>>>
> >>>> I've been getting stall reports like this one while fuzzing the USB
> >>>> stack with gadgetfs. I'm wondering whether this is a bug in gadgetfs
> >>>> or is this report induced by the changes I've made to the USB core
> >>>> code. I didn't touch gadgetfs code though (except for adding a few
> >>>> printk's).
> >>>>
> >>>> I'm on commit 81a84ad3cb5711cec79f4dd53a4ce026b092c432
> >>>
> >>> It's possible that this was caused by commit f16443a034c7 ("USB:
> >>> gadgetfs, dummy-hcd, net2280: fix locking for callbacks").  I've been
> >>> meaning to repair the commit but haven't done it yet.
> >>>
> >>> Can you test with that commit reverted?  You may end up seeing other
> >>> problems instead -- the ones that commit was intended to solve -- but
> >>> perhaps the stalls won't occur.
> >>
> >> So I've reverted both: the changes I made to USB core and the commit
> >> you mentioned, still saw the stalls.
> >>
> >> I've manged to find a way to reproduce this and now I'm not sure the
> >> problem is actually in gadgetfs, it might be the usbtouchscreen
> >> driver.
> >>
> >> The crash log is below.
> >>
> >> Thanks!
> >>
> >> gadgetfs: bound to dummy_udc driver
> >> usb 1-1: new full-speed USB device number 2 using dummy_hcd
> >> gadgetfs: connected
> >> gadgetfs: disconnected
> >> gadgetfs: connected
> >> usb 1-1: config 8 interface 0 altsetting 9 endpoint 0x8F has an
> >> invalid bInterval 0, changing to 10
> >> usb 1-1: config 8 interface 0 altsetting 9 endpoint 0x8F has invalid
> >> maxpacket 839, setting to 64
> >> usb 1-1: config 8 interface 0 altsetting 9 endpoint 0x7 has invalid
> >> maxpacket 1839, setting to 64
> >> usb 1-1: config 8 interface 0 has no altsetting 0
> >> usb 1-1: New USB device found, idVendor=0403, idProduct=f9e9
> >> usb 1-1: New USB device strings: Mfr=4, Product=8, SerialNumber=255
> >> usb 1-1: Product: a
> >> usb 1-1: Manufacturer: a
> >> usb 1-1: SerialNumber: a
> >> gadgetfs: configuration #8
> >> input: a a as /devices/platform/dummy_hcd.0/usb1/1-1/1-1:8.0/input/input8
> >> evbug: Connected device: input8 (a a at usb-dummy_hcd.0-1/input0)
> >> kworker/0:0: page allocation failure: order:0,
> >> mode:0x1280020(GFP_ATOMIC|__GFP_NOTRACK), nodemask=(null)
> >> kworker/0:0 cpuset=/ mems_allowed=0
> >
> > It seems you are running out of memory.
> >
> >> Swap cache stats: add 0, delete 0, find 0/0
> >> Free swap  = 0kB
> >> Total swap = 0kB
> >
> > And no swap. I think you need to give the box a bit more memory (or
> > there might be a leak somewhere).
> 
> Increasing the amount of memory doesn't help. It looks like
> usbtouch_irq() gets called in an infinite loop, and calls
> usb_submit_urb on each iteration, until the kernel runs out of memory.

Yes, that is exactly how USB interrupt-driven devices work. Their URB
completion routine handles the data and immediately resubmits URB to get
more data. The device/HCD will signal interrupt once more data is
available and the process starts over again. The only time we stop
resubmitting URBs if we get one of the following errors:

	case -ETIME:
		/* this urb is timing out */
		dev_dbg(dev,
			"%s - urb timed out - was the device unplugged?\n",
			__func__);
		return;
	case -ECONNRESET:
	case -ENOENT:
	case -ESHUTDOWN:
	case -EPIPE:
		/* this urb is terminated, clean up */
		dev_dbg(dev, "%s - urb shutting down with status: %d\n",
			__func__, urb->status);
		return;

So I'd start looking into dummy_hcd and see why it does not discard
processed URBs fast enough in your setup.

Thanks.

-- 
Dmitry

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-11 13:20 +0200
  Re: usb/gadget: stalls in dummy_timer Alan Stern <stern@rowland.harvard.edu> - 2017-09-11 15:40 +0200
    Re: usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-11 17:20 +0200
      Re: usb/gadget: stalls in dummy_timer Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2017-09-11 21:00 +0200
        Re: usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-12 17:50 +0200
          Re: usb/gadget: stalls in dummy_timer Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2017-09-12 19:10 +0200
            Re: usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-14 18:10 +0200
              Re: usb/gadget: stalls in dummy_timer Alan Stern <stern@rowland.harvard.edu> - 2017-09-14 19:50 +0200
                Re: usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-14 20:00 +0200
                Re: usb/gadget: stalls in dummy_timer Alan Stern <stern@rowland.harvard.edu> - 2017-09-15 21:00 +0200
                Re: usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-19 15:20 +0200
                Re: usb/gadget: stalls in dummy_timer Alan Stern <stern@rowland.harvard.edu> - 2017-09-19 19:20 +0200
                Re: usb/gadget: stalls in dummy_timer Andrey Konovalov <andreyknvl@google.com> - 2017-09-19 19:30 +0200

csiph-web