[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-usb
Subject:    Re: [PATCH] USB: core: Make usb_start_wait_urb() interruptible
From:       Alan Stern <stern () rowland ! harvard ! edu>
Date:       2021-08-31 17:03:38
Message-ID: 20210831170338.GA371511 () rowland ! harvard ! edu
[Download RAW message or body]

On Tue, Aug 31, 2021 at 01:10:32PM +0200, Johan Hovold wrote:
> On Tue, Aug 31, 2021 at 11:13:59AM +0200, Johan Hovold wrote:
> > On Mon, Aug 30, 2021 at 10:46:13AM -0400, Alan Stern wrote:
> 
> > > Consider that a control message in a driver is likely to use the 
> > > default USB_CTRL_[GS]ET_TIMEOUT value of 5 seconds.  Does it make sense 
> > > to allow uninterruptible wait states to last as long as that?
> > 
> > Perhaps sometimes? I don't have a use case at hand, but I haven't
> > reviewed all drivers either.
> > 
> > The comment above usb_start_wait_urb() (which also needs to be updated,
> > by the way) even suggests that drivers should "implement their own
> > interruptible routines" so perhaps this has just gone unnoticed for 20
> > odd years. And the question then becomes, why didn't we use
> > interruptible sleep from the start?
> > 
> > And trying to answer that I find that that's precisely what we did, but
> > for some reason it was changed to uninterruptible sleep in v2.4.11
> > without a motivation (that I could easily find spelled out).
> 
> Here it is:
> 
> 	https://lore.kernel.org/lkml/20010818013101.A7058@devserv.devel.redhat.com/
> 
> It's rationale does not seem valid anymore (i.e. the NULL deref), but
> the example is still instructive.
> 
> If you close for example a v4l application you still expect the device
> to be shut down orderly but with interruptible sleep all control
> requests during shutdown will be aborted immediately.
> 
> Similar for USB serial devices which would for example fail to deassert
> DTR/RTS, etc. (I just verified with the patch applied.)

On Tue, Aug 31, 2021 at 01:02:11PM +0200, Oliver Neukum wrote:
> Upon further considerations forcing user space to handle signals also
> breaks the API, albeit in a more subtle manner. I'd suggest that we use
> wait_event_killable_timeout(). And do it the way Alan initially disliked,
> that is code a version for use by usbfs.
>
> Thus we'd avoid the issue of having an unkillable process, but we do
> not impose a need to handle signals.

Okay, I'll play it safe and rewrite the patch, adding special-purpose 
routines just for usbfs.

Will wait_event_killable_timeout() prevent complaints about tasks being 
blocked for too long (the reason syzbot reported this in the first 
place)?

Alan Stern
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic