#9707 BLOC 1.5-har: occasional oops in sdio_remove_func() in suspend (was: occasional oops in sdio_remove_func() in S/R)

Zarro Boogs per Child bugtracker at laptop.org
Fri Nov 20 03:42:21 EST 2009


#9707: occasional oops in sdio_remove_func() in suspend
--------------------------------+-------------------------------------------
           Reporter:  wad       |       Owner:  dsaxena       
               Type:  defect    |      Status:  new           
           Priority:  blocker   |   Milestone:  1.5-hardware-C
          Component:  kernel    |     Version:  1.5-B2        
         Resolution:            |    Keywords:  q3a16 os42 b2 
        Next_action:  diagnose  |    Verified:  0             
Deployment_affected:            |   Blockedby:                
           Blocking:            |  
--------------------------------+-------------------------------------------

Comment(by dsd):

 So the crash happens during suspend.

 Some interesting messages from before the crash.

 During resume:
 {{{
 [ 2109.784459] mmc2: error -110 during resume (card was removed?)
 [ 2109.790912] mmc2: card 0001 removed
 [ 2109.794800] sdhci_set_ios: power off for mmc2 from b0669941
 [ 2109.800622] sdhci_set_power: new power value = 0
 [...]
 [ 2109.915527] mmc2: new SDIO card at address 0001
 [ 2109.920402] mmc mmc2:0001: parent mmc2 should not be sleeping
 }}}

 Do those messages always appear during resume on a B3?

 The messages are different when the crash happens. The final 2 lines do
 not appear during the resume that happens immediately beforehand, as if
 the card was never redetected. It would be interesting to see logs from
 another crash to confirm that these conditions are identical.

 mmc_rescan is a workqueue-based task. Maybe the difference in the crash
 case is that it wasn't scheduled until suspend started to happen.
 (actually thats probably not possible because processes get frozen)


 Or to attack the problem from a different angle, here's one plausible way
 we could have reached mmc_rescan in the suspend path:

 sdhci_pci_suspend() attempts to suspend the host, but if it fails then it
 attempts to resume it:
 sdhci_resume_host() --> mmc_resume_host() --> mmc_detect_change() -->
 schedule_delayed_work(&host->detect) --> mmc_rescan()

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


More information about the Bugs mailing list