Messages in this thread | | | Date | Mon, 11 Nov 2013 12:07:43 -0800 | From | David Cohen <> | Subject | Re: [PATCH 1/2] usb: gadget: f_fs: remove loop from I/O function |
| |
Hi Michal,
On 11/10/2013 08:50 AM, Michal Nazarewicz wrote: > From: Michal Nazarewicz <mina86@mina86.com> > > When endpoint changes (due to it being disabled or alt setting changed), > mimic the action as if the change happened after the request has been > queued, instead of retrying with the new endpoint. > > Signed-off-by: Michal Nazarewicz <mina86@mina86.com> > --- > drivers/usb/gadget/f_fs.c | 94 +++++++++++++++++++++-------------------------- > 1 file changed, 41 insertions(+), 53 deletions(-) > > diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c > index 44cf775..f875f26 100644 > --- a/drivers/usb/gadget/f_fs.c > +++ b/drivers/usb/gadget/f_fs.c > @@ -754,74 +754,61 @@ static ssize_t ffs_epfile_io(struct file *file, > { > struct ffs_epfile *epfile = file->private_data; > struct ffs_ep *ep; > - char *data = NULL; > ssize_t ret; > + char *data; > int halt; > > - goto first_try; > - do { > - spin_unlock_irq(&epfile->ffs->eps_lock); > - mutex_unlock(&epfile->mutex); > + /* Are we still active? */ > + if (WARN_ON(epfile->ffs->state != FFS_ACTIVE)) { > + ret = -ENODEV; > + goto error; > + } > > -first_try: > - /* Are we still active? */ > - if (WARN_ON(epfile->ffs->state != FFS_ACTIVE)) { > - ret = -ENODEV; > + /* Wait for endpoint to be enabled */ > + ep = epfile->ep; > + if (!ep) { > + if (file->f_flags & O_NONBLOCK) { > + ret = -EAGAIN; > goto error; > } > > - /* Wait for endpoint to be enabled */ > - ep = epfile->ep; > - if (!ep) { > - if (file->f_flags & O_NONBLOCK) { > - ret = -EAGAIN; > - goto error; > - } > - > - if (wait_event_interruptible(epfile->wait, > - (ep = epfile->ep))) { > - ret = -EINTR; > - goto error; > - } > - } > - > - /* Do we halt? */ > - halt = !read == !epfile->in; > - if (halt && epfile->isoc) { > - ret = -EINVAL; > + if (wait_event_interruptible(epfile->wait, (ep = epfile->ep))) {
FYI this line fails checkpatch: ERROR: do not use assignment in if condition #70: FILE: drivers/usb/gadget/f_fs.c:777: + if (wait_event_interruptible(epfile->wait, (ep = epfile->ep))) {
total: 1 errors, 0 warnings, 121 lines checked
Since you're just moving that line here, you may want (or not) to clean this up in a new patch for 3.13.
Br, David Cohen
| |