diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 6119fb41d736..e2667caefb72 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -1557,8 +1557,11 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) INIT_LIST_HEAD(&urb->urb_list); atomic_dec(&urb->use_count); atomic_dec(&urb->dev->urbnum); - if (atomic_read(&urb->reject)) + if (atomic_read(&urb->reject)) { + pr_info("usb_hcd_submit_urb: wake up kill_urb_queue=%p\n", + &usb_kill_urb_queue); wake_up(&usb_kill_urb_queue); + } usb_put_urb(urb); } return status; @@ -1658,8 +1661,11 @@ static void __usb_hcd_giveback_urb(struct urb *urb) usb_anchor_resume_wakeups(anchor); atomic_dec(&urb->use_count); - if (unlikely(atomic_read(&urb->reject))) + if (unlikely(atomic_read(&urb->reject))) { + pr_info("%s: wake up kill_urb_queue=%p\n", __func__, + &usb_kill_urb_queue); wake_up(&usb_kill_urb_queue); + } usb_put_urb(urb); } diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 30e9e680c74c..70acc648e218 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -60,6 +60,7 @@ static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length) goto out; expire = timeout ? msecs_to_jiffies(timeout) : MAX_SCHEDULE_TIMEOUT; + pr_info("usb_start_wait_urb: urb=%p, expire=%ld\n", urb, expire); if (!wait_for_completion_timeout(&ctx.done, expire)) { usb_kill_urb(urb); retval = (ctx.status == -ENOENT ? -ETIMEDOUT : ctx.status); diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c index 357b149b20d3..07cf333e34b4 100644 --- a/drivers/usb/core/urb.c +++ b/drivers/usb/core/urb.c @@ -708,6 +708,8 @@ void usb_kill_urb(struct urb *urb) atomic_inc(&urb->reject); usb_hcd_unlink_urb(urb, -ENOENT); + pr_info("usb_kill_urb: wait for urb=%p, q=%p\n", urb, + usb_kill_urb_queue); wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0); atomic_dec(&urb->reject);