request_firmware() fails on resume from suspend
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Won't Fix
|
Medium
|
Unassigned |
Bug Description
On resume from suspend a driver fails to re-load the USB video-camera firmware. This cause a very long pause (60 seconds according to the log time-stamps) during suspend before the screen has been restored and makes it appear the system has locked up.
The driver makes a call to the kernel's function:
drivers/
but it returns non-zero (error condition).
uname -a
Linux hephaestion 2.6.28-7-generic #20-Ubuntu SMP Mon Feb 9 15:42:34 UTC 2009 x86_64 GNU/Linux
Note the time stamps (60294 to 60354):
kernel: [60294.780270] r5u870-0: Detected Sony VGP-VCC4
kernel: [60294.780398] usb 1-8: firmware: requesting r5u870_1836.fw
kernel: [60354.780066] r5u870-0: Microcode file "r5u870_1836.fw" is missing
kernel: [60354.780069] r5u870-0: Please see http://
kernel: [60354.780072] r5u870-0: initialization failed: -2
kernel: [60354.780079] r5u870: probe of 1-8:1.0 failed with error -2
kernel: [60354.780965] ------------[ cut here ]------------
kernel: [60354.780968] WARNING: at /build/
kernel: [60354.780971] Component: resume devices
kernel: [60354.780973] Modules linked in: g_file_storage dummy_hcd tun hidp binfmt_misc bridge stp bnep kvm_intel kvm acpi_cpufreq input_polldev ppdev parport_pc lp parport snd_hda_intel snd_pcm_oss arc4 snd_mixer_oss ecb snd_pcm snd_seq_dummy uvcvideo iwl3945 joydev snd_seq_oss pcmcia r5u870 snd_seq_midi mac80211 usbcam snd_rawmidi snd_seq_midi_event led_class serio_raw compat_ioctl32 videodev v4l1_compat videobuf_dma_sg snd_seq snd_timer snd_seq_device tifm_7xx1 yenta_socket rsrc_nonstatic pcmcia_core video pcspkr psmouse tifm_core sony_laptop videobuf_core iTCO_wdt iTCO_vendor_support output intel_agp btusb snd soundcore snd_page_alloc cfg80211 nvidia(P) cbc nls_iso8859_1 nls_cp437 vfat fat usb_storage ohci1394 e100 mii ieee1394 fbcon tileblit font bitblit softcursor fuse sha256_generic dm_crypt aes_x86_64 aes_generic uhci_hcd ehci_hcd [last unloaded: dummy_hcd]
kernel: [60354.781047] Pid: 17123, comm: pm-suspend Tainted: P 2.6.28-7-generic #20-Ubuntu
kernel: [60354.781050] Call Trace:
kernel: [60354.781058] [<ffffffff8024d
kernel: [60354.781063] [<ffffffff8026a
kernel: [60354.781068] [<ffffffff8024d
kernel: [60354.781074] [<ffffffff80259
kernel: [60354.781081] [<ffffffff8067f
kernel: [60354.781087] [<ffffffff8040b
kernel: [60354.781093] [<ffffffff804a9
kernel: [60354.781099] [<ffffffff804b1
kernel: [60354.781104] [<ffffffff8027c
kernel: [60354.781110] [<ffffffff8027d
kernel: [60354.781114] [<ffffffff8027d
kernel: [60354.781119] [<ffffffff8027d
kernel: [60354.781123] [<ffffffff8040b
kernel: [60354.781130] [<ffffffff80344
kernel: [60354.781135] [<ffffffff802e4
kernel: [60354.781140] [<ffffffff802e4
kernel: [60354.781145] [<ffffffff80212
kernel: [60354.781148] ---[ end trace ead16c576f6b94cf ]---
kernel: [60354.781783] PM: Finishing wakeup.
kernel: [60354.781784] Restarting tasks ...
Changed in linux: | |
assignee: | nobody → intuitivenipple |
status: | New → Confirmed |
Changed in linux: | |
importance: | Undecided → Medium |
status: | Confirmed → Triaged |
tags: | removed: regression-potential |
Changed in linux (Ubuntu): | |
assignee: | TJ (intuitivenipple) → nobody |
Digging into the source the 60-second pause is the default firmware base/firmware_ class.c:
loading-timeout in drivers/
static int loading_timeout = 60; /* In seconds */
which is applied in _request_ firmware( ):
fw_priv = dev_get_ drvdata( f_dev);
if (uevent) { >timeout. expires = jiffies + loading_timeout * HZ; timer(& fw_priv- >timeout) ; uevent( &f_dev- >kobj, KOBJ_ADD); for_completion( &fw_priv- >completion) ; FW_STATUS_ DONE, &fw_priv->status); sync(&fw_ priv->timeout) ; for_completion( &fw_priv- >completion) ;
if (loading_timeout > 0) {
fw_priv-
add_
}
kobject_
wait_
set_bit(
del_timer_
} else
wait_
mutex_ lock(&fw_ lock);