On Mon, 22 Oct 2018 10:24:46 -0400
Alan Stern <st...@rowland.harvard.edu> wrote:

> On Mon, 22 Oct 2018, Oliver Neukum wrote:
> 
> > On Do, 2018-10-18 at 13:42 -0400, Alan Stern wrote:
> > > On Thu, 18 Oct 2018, Mayuresh Kulkarni wrote:
> > > 
> > > > > The only way to make the ioctl work properly is to have it do a 
> > > > > runtime-PM put at the start and then a runtime-PM get before it
> > 
> > If and only if you want to do this with one ioctl()
> > If you separate the runtime-PM put and the get, you can do it without
> > the waiting part.
> 
> Sure, but you still need a runtime-PM put at the start and a runtime-PM 
> get at the end.  In fact, if you separate this into two calls then you 
> run the risk that the user may never perform the second call, and you 
> would end up with an unbalanced put.
> 

I am tending to agree towards having a single ioctl call here. It is better to 
give minimal control to user-space w.r.t. runtime PM. The current proposal of 
user-space giving an hint to USB-FS/core that - it is not using the device, 
sounds better.

> > > > /*
> > > >  * There are 3 possibilities here:
> > > >  * 1. Device did suspend and resume (success)
> > > >  * 2. Signal was received (failed suspend)
> > > >  * 3. Time-out happened (failed suspend)
> > > 
> > > 4. Device did suspend but a signal was received before the device 
> > > resumed.
> > > 
> > > >  * In any of above cases, we need to resume device.
> > > >  */
> > > > usb_autoresume_device(dev);
> > 
> > Yes and that is the problem. Why do you want to wait for the result
> > of runtime-PM put ? If we need a channel for notifying user space
> > about resume of a device, why wait for the result of suspend instead
> > of using the same channel?
> 
> This is not meant to be a general-purpose channel for notifying 
> userspace when a device resumes.  Such a channel should be defined in 
> the runtime-PM layer, not in the USB layer.
> 
> This is instead meant to be a special-purpose mechanism for adding a
> runtime-suspend/resume interface to usbfs.
> 

Just to be clear here - the worst case wait-time from user-space perspective 
will be <time-out - 1 HZ> + <time-to-resume>, right?
If yes then, timeout argument means "wait at-least timeout sec".

> > > > 
> > > > ps->resume_done = false;
> > > > 
> > > > "ps->resume_done = true;" will be done by the runtime resume call-back.
> > 
> > No. You cannot do that in this way. It needs to be a unified device
> > state or a sequence of multiple suspends and resumes will have strange
> > results.
> 
> They won't, because such a sequence cannot occur.  The ioctl thread
> will wake up when the first resume occurs and it will do a runtime-PM
> get, thus preventing any further suspends.
> 
> Alan Stern

Reply via email to