#11551 NORM 1.75-so: 1.75 audio hangs during recovery from aborted suspend

Zarro Boogs per Child bugtracker at laptop.org
Thu Dec 15 16:53:33 EST 2011


#11551: 1.75 audio hangs during recovery from aborted suspend
--------------------+-------------------------------------------------------
 Reporter:  pgf     |                 Owner:  corbet                            
     Type:  defect  |                Status:  new                               
 Priority:  normal  |             Milestone:  1.75-software                     
Component:  kernel  |               Version:  Development source as of this date
 Keywords:          |           Next_action:  diagnose                          
 Verified:  0       |   Deployment_affected:                                    
Blockedby:          |              Blocking:                                    
--------------------+-------------------------------------------------------
 we use the pm_wakeup_event() mechanism to signal to the kernel that a
 wakeup event has occurred.  if such an event occurs while we're in the
 process of suspending, suspend_enter() will abort the suspend in progress,
 and unwind via all of the resume routines.

 when this happens, we appear to hang during audio resume.  this is easy to
 reproduce.

 {{{
 bash-4.1#
 bash-4.1# cat /sys/power/wakeup_count
 8
 bash-4.1# echo 8 > /sys/power/wakeup_count
 bash-4.1# rtcwake -s1 -mmem
 rtcwake: wakeup from "mem" using /dev/rtc0 at Thu Jan  1 00:02:31 1970

 [  792.330933] PM: Syncing filesystems ... done.
 [  792.484335] Freezing user space processes ... (elapsed 0.01 seconds)
 done.
 [  792.506772] Freezing remaining freezable tasks ... (elapsed 0.01
 seconds) done.
 [  792.527436] calling  rfkill3+ @ 1479
 [  792.531004] call rfkill3+ returned 0 after 3468 usecs
 [  792.536035] calling  phy3+ @ 1479
 [  792.539330] call phy3+ returned 0 after 3204 usecs
 [  792.539335] calling  mmc1:0001:1+ @ 1479
 [  792.547995] call mmc1:0001:1+ returned 0 after 4 usecs
 [  792.548000] calling  mmc1:0001+ @ 1479
 [  792.556837] call mmc1:0001+ returned 0 after 0 usecs
 [  792.556837] calling  input10+ @ 1479
 [  792.565328] call input10+ returned 0 after 4 usecs
 [  792.570097] calling  input9+ @ 1479
 [  792.573550] call input9+ returned 0 after 3370 usecs
 [  792.578500] calling  7-0021+ @ 1479
 [  792.581959] call 7-0021+ returned 0 after 3375 usecs
 [  792.586894] calling  mmc2:0001+ @ 1479
 [  792.590633] call mmc2:0001+ returned 0 after 0 usecs
 [  792.595571] calling  input8+ @ 1479
 [  792.599042] call input8+ returned 0 after 3375 usecs
 [  792.603975] calling  input7+ @ 1479
 [  792.607447] call input7+ returned 0 after 1 usecs
 [  792.607452] calling  soc-audio+ @ 1479
 [  792.618280] call soc-audio+ returned 0 after 2357 usecs
 [  792.623474] calling  snd-soc-dummy+ @ 1479
 [  792.627554] call snd-soc-dummy+ returned 0 after 0 usecs
 [  792.632828] calling  dcon-bl+ @ 1479
 [  792.636388] call dcon-bl+ returned 0 after 0 usecs
 [  792.636393] calling  dcon+ @ 1479
 [  792.644451] call dcon+ returned 0 after 4 usecs
 [  792.644456] calling  6-000d+ @ 1479
 [  792.652430] dcon_source_switch to DCON
 [  792.689903] olpc-dcon: The DCON has control
 [  792.694080] call 6-000d+ returned 0 after 44067 usecs
 [  792.699104] calling  storage+ @ 1479
 [  792.702662] call storage+ returned 0 after 0 usecs
 [  792.707423] calling  mmc2::+ @ 1479
 [  792.710887] call mmc2::+ returned 0 after 0 usecs
 [  792.715565] calling  mmc1::+ @ 1479
 [  792.719033] call mmc1::+ returned 0 after 3371 usecs
 [  792.723960] calling  mmc0::+ @ 1479
 [  792.727433] call mmc0::+ returned 0 after 0 usecs
 [  792.732107] calling  olpc-battery.0+ @ 1479
 [  792.736265] call olpc-battery.0+ returned 0 after 5 usecs
 [  792.736269] calling  rtc1+ @ 1479
 [  792.745935] call rtc1+ returned 0 after 987 usecs
 [  792.745941] calling  rtc0+ @ 1479
 [  792.753899] call rtc0+ returned 0 after 1 usecs
 [  792.758404] calling  input6+ @ 1479
 [  792.761873] call input6+ returned 0 after 3375 usecs
 [  792.766857] calling  1-1+ @ 1157
 [  792.770119] calling  input5+ @ 1479
 [  792.773575] call input5+ returned 0 after 3374 usecs
 [  792.778528] calling  serio1+ @ 1479
 [  792.781981] call serio1+ returned 0 after 3372 usecs
 [  792.786938] calling  serio0+ @ 1479
 [  792.790407] call serio0+ returned 0 after 3377 usecs
 [  792.795400] calling  input4+ @ 1479
 [  792.798867] call input4+ returned 0 after 0 usecs
 [  792.798871] calling  input3+ @ 1479
 [  792.807114] call input3+ returned 0 after 4 usecs
 [  792.811789] calling  olpc-switch.0+ @ 1479
 [  792.815873] call olpc-switch.0+ returned 0 after 12 usecs
 [  792.821237] calling  input2+ @ 1479
 [  792.824809] call input2+ returned 0 after 0 usecs
 [  792.824815] calling  olpc-ols.0+ @ 1479
 [  792.833286] call olpc-ols.0+ returned 0 after 3715 usecs
 [  792.838571] calling  input1+ @ 1479
 [  792.842043] call input1+ returned 0 after 1 usecs
 [  792.846792] calling  input0+ @ 1479
 [  792.850258] call input0+ returned 0 after 0 usecs
 [  792.854951] calling  lis3lv02d+ @ 1479
 [  792.858671] call lis3lv02d+ returned 0 after 0 usecs
 [  792.858671] calling  alarmtimer+ @ 1479
 [  792.867533] call alarmtimer+ returned 0 after 5 usecs
 [  792.872580] calling  regulatory.0+ @ 1479
 [  792.876739] call regulatory.0+ returned 0 after 4 usecs
 [  792.881954] calling  5-0019+ @ 1479
 [  792.885471] call 5-0019+ returned 0 after 3 usecs
 [  792.890162] calling  5-001d+ @ 1479
 [  792.893640] call 5-001d+ returned 0 after 6 usecs
 [  792.898520] calling  i2c-5+ @ 1479
 [  792.901899] call i2c-5+ returned 0 after 3287 usecs
 [  792.906754] calling  0-001a+ @ 1479
 [  792.910230] call 0-001a+ returned 0 after 0 usecs
 [  792.914927] call 1-1+ returned 0 after 144574 usecs
 [  792.919766] calling  usb1+ @ 1158
 [  792.923201] call usb1+ returned 0 after 3237 usecs
 [  792.927966] calling  i2c-0+ @ 1479
 [  792.931348] call i2c-0+ returned 0 after 1 usecs
 [  792.935958] calling  1-0068+ @ 1479
 [  792.939428] call 1-0068+ returned 0 after 3378 usecs
 [  792.944366] calling  i2c-1+ @ 1479
 [  792.947750] call i2c-1+ returned 0 after 0 usecs
 [  792.947754] calling  3-0030+ @ 1479
 [  792.955810] RAYDIUM_i2c_suspend, disable i2c irq
 [  792.960396] call 3-0030+ returned 0 after 4481 usecs
 [  792.965332] calling  i2c-3+ @ 1479
 [  792.968711] call i2c-3+ returned 0 after 3289 usecs
 [  792.973558] calling  2-001e+ @ 1479
 [  792.977029] call 2-001e+ returned 0 after 4 usecs
 [  792.977034] calling  i2c-2+ @ 1479
 [  792.985091] call i2c-2+ returned 0 after 0 usecs
 [  792.985091] calling  i2c-6+ @ 1479
 [  792.993041] call i2c-6+ returned 0 after 3287 usecs
 [  792.997893] calling  i2c-7+ @ 1479
 [  793.001268] call i2c-7+ returned 0 after 3287 usecs
 [  793.006120] calling  vsram+ @ 1479
 [  793.009501] call vsram+ returned 0 after 0 usecs
 [  793.009501] calling  mmp2-pcm-audio.0+ @ 1479
 [  793.018423] call mmp2-pcm-audio.0+ returned 0 after 4 usecs
 [  793.023955] calling  mmp2-i2s.0+ @ 1479
 [  793.027768] call mmp2-i2s.0+ returned 0 after 5 usecs
 [  793.032788] calling  sdhci-pxa.2+ @ 1479
 [  793.036801] call sdhci-pxa.2+ returned 0 after 93 usecs
 [  793.036808] calling  sdhci-pxa.1+ @ 1479
 [  793.045907] libertas_sdio mmc1:0001:1: mmc1:0001:1: suspend: PM flags =
 0x3
 [  793.052838] libertas_sdio mmc1:0001:1: Suspend without wake params --
 powering down card
 [  794.075865] pm_wakeup_event: Added a wakeup event for mmp-rtc expiring
 at 1000
 [  794.083086] pm_wakeup_event: Added a wakeup event for mmp-rtc expiring
 at 1000
 [  794.094621] mmc1: card 0001 removed
 [  794.098272] call sdhci-pxa.1+ returned 0 after 1027705 usecs
 [  794.098280] PM: Some devices failed to suspend
 [  794.108411] calling  usb1+ @ 1158
 [  794.111843] calling  sdhci-pxa.1+ @ 1479
 [  794.115821] call sdhci-pxa.1+ returned 0 after 0 usecs
 [  794.115821] calling  sdhci-pxa.2+ @ 1479
 [  794.144183] call usb1+ returned 0 after 34895 usecs
 [  794.149054] calling  1-1+ @ 5
 [  794.205541] call 1-1+ returned 0 after 55150 usecs
 [  794.228624] call sdhci-pxa.2+ returned 0 after 101341 usecs
 [  794.234184] calling  mmp2-i2s.0+ @ 1479
 [  794.237999] call mmp2-i2s.0+ returned 0 after 3716 usecs
 [  794.243273] calling  mmp2-pcm-audio.0+ @ 1479
 }}}


 the kernel used in the above failure log had "initcall_debug" on the
 kernel commandline, and the following debug output had been added:

 {{{
 diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
 index 84f7c7d..e678e04 100644
 --- a/drivers/base/power/wakeup.c
 +++ b/drivers/base/power/wakeup.c
 @@ -516,6 +516,8 @@ void __pm_wakeup_event(struct wakeup_source *ws,
 unsigned int msec)
         if (!ws)
                 return;

 +       printk("pm_wakeup_event: Added a wakeup event for %s expiring at
 %u\n",
 +               ws->name, msec);
         spin_lock_irqsave(&ws->lock, flags);

         ws->event_count++;
 }}}

-- 
Ticket URL: <http://dev.laptop.org/ticket/11551>
One Laptop Per Child <http://laptop.org/>
OLPC bug tracking system


More information about the Bugs mailing list