Re: video: USB webcam fails since kernel 3.2

From: Martin-Ãric Racine
Date: Mon Jul 09 2012 - 07:33:42 EST


2012/7/8 Hans de Goede <hdegoede@xxxxxxxxxx>:
> On 07/08/2012 03:01 PM, Martin-Ãric Racine wrote:
>>
>> 2012/6/17 Martin-Ãric Racine <martin-eric.racine@xxxxxx>:
>>>
>>> pe, 2012-06-15 kello 23:41 -0500, Jonathan Nieder kirjoitti:
>>>>
>>>> Martin-Ãâric Racine wrote:
>>>>>
>>>>> usb 1-7: new high-speed USB device number 3 using ehci_hcd
>>>>
>>>> [...]
>>>>>
>>>>> usb 1-7: New USB device found, idVendor=0ac8, idProduct=0321
>>>>> usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=0
>>>>> usb 1-7: Product: USB2.0 Web Camera
>>>>> usb 1-7: Manufacturer: Vimicro Corp.
>>>>
>>>> [...]
>>>>>
>>>>> Linux media interface: v0.10
>>>>> Linux video capture interface: v2.00
>>>>> gspca_main: v2.14.0 registered
>>>>> gspca_main: vc032x-2.14.0 probing 0ac8:0321
>>>>> usbcore: registered new interface driver vc032x
>>>>
>>>>
>>>> The device of interest is discovered.
>>>>
>>>>> gspca_main: ISOC data error: [36] len=0, status=-71
>>>>> gspca_main: ISOC data error: [65] len=0, status=-71
>>>>
>>>> [...]
>>>>>
>>>>> gspca_main: ISOC data error: [48] len=0, status=-71
>>>>> video_source:sr[3246]: segfault at 0 ip (null) sp ab36de1c error 14
>>>>> in cheese[8048000+21000]
>>>>> gspca_main: ISOC data error: [17] len=0, status=-71
>>>>
>>>>
>>>> (The above data error spew starts around t=121 seconds and continues
>>>> at a rate of about 15 messages per second. The segfault is around
>>>> t=154.)
>>>
>>>
>>>> The vc032x code hasn't changed since 3.4.1, so please report your
>>>> symptoms to Jean-FranÃÂois Moine <moinejf@xxxxxxx>, cc-ing
>>>> linux-media@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, and either
>>>> me or this bug log so we can track it. Be sure to mention:
>>>>
>>>> - steps to reproduce, expected result, actual result, and how the
>>>> difference indicates a bug (should be simple enough in this case)
>>>
>>>
>>> 1. Ensure that user 'myself' is a member of the 'video' group.
>>> 2. Launch the webcam application Cheese from the GNOME desktop.
>>>
>>> Expected result: Cheese displays whatever this laptop's camera sees.
>>>
>>> Actual result: Cheese crashes while attempting to access the camera.
>>>
>>>> - how reproducible the bug is (100%?)
>>>
>>>
>>> 100%
>>>
>>>> - which kernel versions you have tested and result with each (what is
>>>> the newest kernel version that worked?)
>>>
>>>
>>> It probably was 3.1.0 or some earlier 3.2 release (the upcoming Debian
>>> will release with 3.2.x; 3.4 was only used here for testing purposes),
>>> but I wouldn't know for sure since I don't use my webcam too often.
>>
>>
>> I finally found time to perform further testing, using kernel packages
>> from snapshots.debian.org, and the last one that positively worked (at
>> least using GNOME's webcam application Cheese) was:
>>
>> linux-image-3.1.0-1-686-pae 3.1.8-2
>> Linux 3.1 for modern PCs
>>
>> This loaded the following video modules:
>>
>> gspca_vc032x
>> gspca_main
>> videodev
>> media
>>
>> Tests using 3.2.1-1 or more recent crashed as described before. This
>> at least gives us a time frame for when the regression started.
>
>
> Hmm, this is then likely caused by the new isoc bandwidth negotiation code
> in 3.2, unfortunately the vc032x driver is one of the few gspca drivers
> for which I don't have a cam to test with. Can you try to build your own
> kernel from source?
>
> Boot into your own kernel, and verify the regression is still there,
> then edit drivers/media/video/gspca/gspca.c and go to the which_bandwidth
> function, and at the beginning of this function add the following line:
>
> return 2000 * 2000 * 120;
>
> Then rebuild and re-install the kernel and try again.
>
> If that helps, remove the added
> return 2000 * 2000 * 120;
> line, and also remove the following lines from which_bandwidth:
>
> /* if the image is compressed, estimate its mean size */
> if (!gspca_dev->cam.needs_full_bandwidth &&
> bandwidth < gspca_dev->cam.cam_mode[i].width *
> gspca_dev->cam.cam_mode[i].height)
> bandwidth = bandwidth * 3 / 8; /* 0.375 */
>
> And try again if things still work this way.
>
> Once you've tested this I can try to write a fix for this.

Hans,

Thank you for your reply.

Just to eliminate the possibility of mistakes on my part while trying
to perform the above changes, could you send me a patch against Linux
3.2.21 that I could apply as-is, before building myself a test kernel
package?

Cheers!
Martin-Ãric
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/