Hi,
we are using 3.2.2 version of kernel.
When Bluetooth(connected to USB 2.0) is suspended, urb->use_count
value does not become zero and eventually there is a continuous wait
in wait_event() of usb_kill_urb().
wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0);
urb_count is incremented at only one place in usb_hcd_submit_urb() and
decremented in usb_hcd_giveback_urb(). (Also, in error case inside
usb_hcd_submit_urb()). After taking print of urb->use_count at all
these places, I see, even without connecting the Bluetooth device
urb_count is incremented while below execution has never been
decremented.
dwc_otg: version 2.93a 15-MAY-2011
[ 2.440000] ====>[usb_hcd_submit_urb][1482] urb->use_count = 1
pipe=2147484032 [vid=0x1d6b] [pid=0x0003][devno=1]
[ 2.450000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 0
pipe=2147484032 [vid=0x1d6b] [pid=0x0003][devno=1]
[ 2.460000] ====>[usb_hcd_submit_urb][1482] urb->use_count = 1
pipe=1077969280 [vid=0x1d6b] [pid=0x0003][devno=1]
[ 2.480000] Core Release: 2.81a
.....
.....
[ 3.490000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 0
pipe=2147484032 [vid=0x1d6b] [pid=0x0002][devno=1]
[ 3.540000] ====>[usb_hcd_submit_urb][1482] urb->use_count = 2
pipe=1077969280 [vid=0x1d6b] [pid=0x0002][devno=1]
[ 3.540000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 1
pipe=1077969280 [vid=0x1d6b] [pid=0x0002][devno=1]
urb->use_count corresponding to pipe 1077969280 incremented from 0 to
2 and never decremented back to 0 till Linux boots up.
Please find the complete log attached herewith.
Thanks
On Thu, 22 Nov 2012, naveen yadav wrote:
> Hi,
>
> we are using 3.2.2 version of kernel.
>
> When Bluetooth(connected to USB 2.0) is suspended, urb->use_count
> value does not become zero and eventually there is a continuous wait
> in wait_event() of usb_kill_urb().
> wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0);
>
> urb_count is incremented at only one place in usb_hcd_submit_urb() and
That's how it is _supposed_ to work. You have discovered that
something else increments urb->use_count.
> decremented in usb_hcd_giveback_urb(). (Also, in error case inside
> usb_hcd_submit_urb()). After taking print of urb->use_count at all
> these places, I see, even without connecting the Bluetooth device
> urb_count is incremented while below execution has never been
> decremented.
> .....
> [ 3.490000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 0
> pipe=2147484032 [vid=0x1d6b] [pid=0x0002][devno=1]
> [ 3.540000] ====>[usb_hcd_submit_urb][1482] urb->use_count = 2
> pipe=1077969280 [vid=0x1d6b] [pid=0x0002][devno=1]
> [ 3.540000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 1
> pipe=1077969280 [vid=0x1d6b] [pid=0x0002][devno=1]
Now you need to find out what other code has changed urb->use_count and
fix it.
Alan Stern
Dear Alan,
Thanks for your reply ,
We check on 3.2.34 and 3.6.7 on X86 host machine. and result is same
without connecting Bluetooth device.
I am attaching log
On Thu, Nov 22, 2012 at 9:08 PM, Alan Stern <[email protected]> wrote:
> On Thu, 22 Nov 2012, naveen yadav wrote:
>
>> Hi,
>>
>> we are using 3.2.2 version of kernel.
>>
>> When Bluetooth(connected to USB 2.0) is suspended, urb->use_count
>> value does not become zero and eventually there is a continuous wait
>> in wait_event() of usb_kill_urb().
>> wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0);
>>
>> urb_count is incremented at only one place in usb_hcd_submit_urb() and
>
> That's how it is _supposed_ to work. You have discovered that
> something else increments urb->use_count.
>
>> decremented in usb_hcd_giveback_urb(). (Also, in error case inside
>> usb_hcd_submit_urb()). After taking print of urb->use_count at all
>> these places, I see, even without connecting the Bluetooth device
>> urb_count is incremented while below execution has never been
>> decremented.
>
>> .....
>> [ 3.490000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 0
>> pipe=2147484032 [vid=0x1d6b] [pid=0x0002][devno=1]
>> [ 3.540000] ====>[usb_hcd_submit_urb][1482] urb->use_count = 2
>> pipe=1077969280 [vid=0x1d6b] [pid=0x0002][devno=1]
>> [ 3.540000] ====>[usb_hcd_giveback_urb][1626] urb->use_count = 1
>> pipe=1077969280 [vid=0x1d6b] [pid=0x0002][devno=1]
>
> Now you need to find out what other code has changed urb->use_count and
> fix it.
>
> Alan Stern
>
On Mon, 26 Nov 2012, naveen yadav wrote:
> Dear Alan,
>
> Thanks for your reply ,
>
> We check on 3.2.34 and 3.6.7 on X86 host machine. and result is same
> without connecting Bluetooth device.
> I am attaching log
Yes, very good. But you still have to do what I mentioned in my
earlier email:
> On Thu, Nov 22, 2012 at 9:08 PM, Alan Stern <[email protected]> wrote:
> > Now you need to find out what other code has changed urb->use_count and
> > fix it.
Alan Stern