Index: usb-devel/drivers/usb/gadget/udc/dummy_hcd.c =================================================================== --- usb-devel.orig/drivers/usb/gadget/udc/dummy_hcd.c +++ usb-devel/drivers/usb/gadget/udc/dummy_hcd.c @@ -1826,6 +1826,7 @@ static void dummy_timer(struct timer_lis break; dum->ep[i].already_seen = 0; } + dev_info(dummy_dev(dum_hcd), "Timer handler\n"); restart: list_for_each_entry_safe(urbp, tmp, &dum_hcd->urbp_list, urbp_list) { @@ -1835,6 +1836,9 @@ restart: struct dummy_ep *ep = NULL; int status = -EINPROGRESS; + dev_info(dummy_dev(dum_hcd), "urbp %p %x next_frame %p\n", + urbp, urbp->urb->pipe, dum_hcd->next_frame_urbp); + /* stop when we reach URBs queued after the timer interrupt */ if (urbp == dum_hcd->next_frame_urbp) break; Index: usb-devel/drivers/usb/class/cdc-wdm.c =================================================================== --- usb-devel.orig/drivers/usb/class/cdc-wdm.c +++ usb-devel/drivers/usb/class/cdc-wdm.c @@ -112,6 +112,7 @@ struct wdm_device { enum wwan_port_type wwanp_type; struct wwan_port *wwanp; + int alancount; }; static struct usb_driver wdm_driver; @@ -255,6 +256,14 @@ static void wdm_int_callback(struct urb desc = urb->context; dr = (struct usb_cdc_notification *)desc->sbuf; + if (status == -EPROTO) { + if (desc->alancount >= 1) + return; + ++desc->alancount; + dev_info(&desc->intf->dev, "Alan test\n"); + dump_stack(); + } + if (status) { switch (status) { case -ESHUTDOWN: