[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 11 Nov 2013 12:07:43 -0800
From: David Cohen <david.a.cohen@...ux.intel.com>
To: Michal Nazarewicz <mpn@...gle.com>
CC: Alan Stern <stern@...land.harvard.edu>, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org, Michal Nazarewicz <mina86@...a86.com>
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@...a86.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@...a86.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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists