On Wed, Oct 10, 2012 at 1:51 PM, Oliver Neukum <oneukum@xxxxxxx> wrote: > > No, the problem is autoresume. > > Suppose we have a device with two interface. Interface A be usbnet; interface B > something you page on. Now consider that you can only resume both interfaces > and this is (and needs to be) done synchronously. > > Now we can have this code path: > > autoresume of device -> resume() -> kmalloc(..., GFP_KERNEL) -> > VM layer decides to start paging out -> IO to interface B -> autoresume of device > --> DEADLOCK OK, thanks for your detailed explanation. > We need to use GFP_NOIO in situations the helper cannot know about. > Please add a gfp_t parameter. Then the caller will solve that. Considered that most of drivers call the helpers in different context, I think it is better to switch the gpf_t flag runtime inside helpers, like below: if (dev->power.runtime_status == RPM_RESUMING) gfp = GFP_NOIO; else gfp = GFP_KERNEL; 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