On Thu, Oct 11, 2012 at 10:36 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > > It's worse than you may realize. When a SCSI disk is suspended, all of > its ancestor devices may be suspended too. Pages can't be read in from > the drive until all those ancestors are resumed. This means that all > runtime resume code paths for all drivers that could be bound to an > ancestor of a block device must avoid GFP_KERNEL. In practice it's Exactly, so several subsystems(for example, pci, usb, scsi) will be involved, and converting GFP_KERNEL in runtime PM path to GFP_NOIO becomes more difficult. > probably easiest for the runtime PM core to use tsk_set_allowd_gfp() > before calling any runtime_resume method. Yes, it might be done in usb runtime resume context because all usb device might include a mass storage interface. But, in fact, we can find if there is one mass storage interface on the current configuration easily inside usb_runtime_resume(). Also, we can loose the constraint in runtime PM core, before calling runtime_resume callback for one device, the current context is marked as ~GFP_IOFS only if it is a block device or there is one block device descendant. But the approach becomes a bit complicated because device tree traversing is involved. Thanks, -- Ming Lei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html