public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Stefani Seibold <stefani@seibold.net>
To: Oliver Neukum <oneukum@suse.de>
Cc: linux-kernel@vger.kernel.org, greg@kroah.com,
	gregkh@linuxfoundation.org,
	thomas.braunstorfinger@rohde-schwarz.com
Subject: Re: [PATCH] add new NRP power meter USB device driver
Date: Sat, 02 Jun 2012 07:57:36 +0200	[thread overview]
Message-ID: <1338616656.25409.10.camel@wall-e> (raw)
In-Reply-To: <201206011616.36284.oneukum@suse.de>

On Fri, 2012-06-01 at 16:16 +0200, Oliver Neukum wrote:
> Am Donnerstag, 31. Mai 2012, 11:21:40 schrieb Stefani Seibold:
> > On Thu, 2012-05-31 at 10:20 +0200, Oliver Neukum wrote:
> > 
> > > > > 
> > > > > > +		if (arg) {
> > > > > > +			ret = wait_event_interruptible_timeout(
> > > > > > +				dev->out_running.wait,
> > > > > > +				list_empty(&dev->out_running.urb_list),
> > > > > > +				msecs_to_jiffies(arg));
> > > > > > +			if (!ret)
> > > > > > +				return -ETIMEDOUT;
> > > > > > +			if (ret < 0)
> > > > > > +				return ret;
> > > > > > +			return 0;
> > > > > > +		} else {
> > > > > > +			return wait_event_interruptible(
> > > > > > +				dev->out_running.wait,
> > > > > > +				list_empty(&dev->out_running.urb_list));
> > > > > > +		}
> > > > > > +		break;
> > > > > 
> > > > > This is very ugly. If you need fsync(), then implement it.
> > > > > 
> > > > 
> > > > fsync() did not meat the requirements, since i need in some case a
> > > > timeout for the device. poll() will also not help, since it signals only
> > > > that there is space to write.
> > > 
> > > Well, then implement fsync() with interruptible sleep and use a timer
> > > in user space.
> > > 
> > 
> > But this will not solve the problem of older software which is still
> > depending on this ioctl.
> 
> Yes. I guess it might be included in a depreated form. However
> a sane alternative must be provided.
> 

I will implement the fsync() function. But your idea using an alarm
timer will break many libraries like Qt or GLIB, which depends on the
the exclusive use of the alarm timer.

I know, there is always a way to do it, but for the average coder will
create a piece of complex code, full of races and pretenses.

Also you would not believe, but most of the developer i know are not
familiar with implementing signal safe code. 

> > > Yes, but this seems to be buggy:
> > > 
> > > +	ret = usb_submit_urb(urb, GFP_KERNEL);
> > > +	if (ret) {
> > > +		usb_unanchor_urb(urb);
> > > +		urb_list_add_tail(&dev->read_lock, urb, &dev->in_avail);
> > > +		nrpz_err("Failed submitting read urb (error %d)", ret);
> > > +	}
> > > 
> > > You have already transfered the data to user space. It seems to me that you
> > > need to zero out the URB and need to handle the case of getting an URB
> > > without data.
> > > 
> > 
> > Okay, i understand what you mean. Zeroing out is not necessary since
> > usb_submit_urb will set urb->status to -EINPROGRESS. This behavior is
> > well documented.
> > 
> 
> Look more closely at the code:
> 
> int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
> {
>         int                             xfertype, max;
>         struct usb_device               *dev;
>         struct usb_host_endpoint        *ep;
>         int                             is_out;
> 
>         if (!urb || urb->hcpriv || !urb->complete)
>                 return -EINVAL;
>         dev = urb->dev;
>         if ((!dev) || (dev->state < USB_STATE_UNAUTHENTICATED))
>                 return -ENODEV;
> 
>         /* For now, get the endpoint from the pipe.  Eventually drivers
>          * will be required to set urb->ep directly and we will eliminate
>          * urb->pipe.
>          */
>         ep = usb_pipe_endpoint(dev, urb->pipe);
>         if (!ep)
>                 return -ENOENT;
> 
>         urb->ep = ep;
>         urb->status = -EINPROGRESS;
>         urb->actual_length = 0;
> 
> There are a few error conditions where this is not true.
> 

Yes, but i am not sure if this conditions will be true by an already
correct initialized urb. Anyway, i will fix it.



  parent reply	other threads:[~2012-06-02  5:57 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-29 19:14 [PATCH] add new NRP power meter USB device driver stefani
2012-05-29 23:15 ` Greg KH
2012-05-31  8:47   ` Stefani Seibold
2012-05-31  9:41     ` Greg KH
2012-06-02  7:10       ` Stefani Seibold
2012-06-02 12:10         ` Greg KH
2012-06-02 15:43           ` Stefani Seibold
2012-05-31  9:53     ` Greg KH
2012-05-31 10:17       ` Oliver Neukum
2012-05-31 12:04         ` Greg KH
2012-05-31 12:32           ` Oliver Neukum
2012-05-31 12:48             ` Greg KH
2012-05-31 14:22               ` Oliver Neukum
2012-05-31 14:32                 ` Greg KH
2012-06-01 13:38                   ` Oliver Neukum
2012-05-30  8:10 ` Oliver Neukum
2012-05-31  7:43   ` Stefani Seibold
2012-05-31  8:20     ` Oliver Neukum
2012-05-31  9:21       ` Stefani Seibold
2012-06-01 14:16         ` Oliver Neukum
2012-06-01 14:34           ` Alan Cox
2012-06-02  5:57           ` Stefani Seibold [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-06-02 16:18 stefani
2012-06-02 20:24 ` Oliver Neukum
2012-06-03  5:15   ` Stefani Seibold
2012-06-03  8:46 stefani
2012-06-03 11:48 ` Joe Perches
2012-06-13  0:58 ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1338616656.25409.10.camel@wall-e \
    --to=stefani@seibold.net \
    --cc=greg@kroah.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oneukum@suse.de \
    --cc=thomas.braunstorfinger@rohde-schwarz.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox