On Thu, Apr 22, 2010 at 10:17 PM, Rafael J. Wysocki <rjw@xxxxxxx> wrote: > On Friday 23 April 2010, Matt Reimer wrote: >> On Thu, Mar 4, 2010 at 1:15 PM, Pavel Machek <pavel@xxxxxx> wrote: >> > Hi! >> > >> >> > My thought exactly. This is the only approach that also solves the >> >> > following race: >> >> > >> >> > A driver is unloaded at the same time as a suspend starts. >> >> > >> >> > The writeback thread gets frozen. >> >> > >> >> > Then before the rmmod thread is frozen, it calls del_gendisk. >> >> > >> >> > Delaying things by means of a workqueue (or the equivalent) might also >> >> > work, but it doesn't seem as safe. For example, some important >> >> > writebacks might end up getting delayed until too late. >> > >> > Delaying writebacks during sleep should be ok... That's why we do >> > sync() after userspace is frozen -- nothing really important should be >> > waiting for writeback after that point. >> >> Has this been fixed, > > No, it hasn't. > >> or has a consensus about how to fix this been >> achieved? I'm hitting the same problem and have some time to work on a >> fix. > > Generally, it looks like del_gendisk should thaw writeback threads, but not > during suspend, only during resume. Thawing the writeback thread only during resume does fix the case Maxim originally presented: 0. build kernel with CONFIG_MMC_UNSAFE_RESUME 1. insert SD card 2. suspend 3. remove SD card while suspended 4. resume from suspend hangs But if CONFIG_MMC_UNSAFE_RESUME is not set, the kernel oopses during suspend because the MMC device suspend times out: mmc0: card e624 removed **** DPM device timeout: pxa2xx-mci.0 (pxa2xx-mci) kernel BUG at /home/mreimer/sdg/android/android-2.1/kernel/drivers/base/power/main.c:453! Unable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = c0004000 [00000000] *pgd=00000000 Internal error: Oops: 817 [#1] PREEMPT If I thaw the writeback thread unconditionally in del_gendisk() then suspend and resume work as expected for both CONFIG_MMC_UNSAFE_RESUME set/not set, even when the card is removed while suspended. So what is the proper fix? Matt _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm