All of lore.kernel.org
 help / color / mirror / Atom feed
* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-23 16:33 Greg Kroah-Hartman
  0 siblings, 0 replies; 11+ messages in thread
From: Greg Kroah-Hartman @ 2018-05-23 16:33 UTC (permalink / raw)
  To: Oliver Neukum
  Cc: Guido Kiener, dpenkler, steve_bayless, pankaj.adhikari,
	guido.kiener, linux-usb

On Wed, May 23, 2018 at 02:08:27PM +0200, Oliver Neukum wrote:
> Am Donnerstag, den 17.05.2018, 19:03 +0200 schrieb Guido Kiener:
> > +static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
> > +                                   unsigned int __user *arg)
> > +{
> > +       struct usbtmc_device_data *data = file_data->data;
> > +       struct device *dev = &data->intf->dev;
> > +       int rv;
> > +       unsigned int timeout;
> > +       unsigned long expire;
> > +
> > +       if (!data->iin_ep_present) {
> > +               dev_dbg(dev, "no interrupt endpoint present\n");
> > +               return -EFAULT;
> > +       }
> > +
> > +       if (get_user(timeout, arg))
> > +               return -EFAULT;
> > +
> > +       expire = msecs_to_jiffies(timeout);
> > +
> > +       mutex_unlock(&data->io_mutex);
> 
> There is such a thing as threads sharing file descriptors.
> That leads to the question what happens to the mutex if this
> ioctl() is called multiple times.

Processes can share file descriptors as well, no need to mess with a
thread :)

good catch.

greg k-h
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-28 12:36 Oliver Neukum
  0 siblings, 0 replies; 11+ messages in thread
From: Oliver Neukum @ 2018-05-28 12:36 UTC (permalink / raw)
  To: guido
  Cc: dpenkler, steve_bayless, gregkh, pankaj.adhikari, guido.kiener,
	linux-usb

Am Montag, den 28.05.2018, 10:59 +0000 schrieb guido@kiener-
muenchen.de:
> > No, the problem is that you will underflow io->mutex
> > 
> 
> Don't worry. The function usbtmc488_ioctl_wait_srq is called by
> usbtmc_ioctl which already locks the mutex. See
> https://elixir.bootlin.com/linux/v4.17-rc7/source/drivers/usb/class/usbtmc.c#L1189
> So the mutex is just unlocked here to allow other threads to still communicate
> with the device.

Hi,

thanks I had overlooked that.

	Regards
		Oliver
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-28 10:59 Guido Kiener
  0 siblings, 0 replies; 11+ messages in thread
From: Guido Kiener @ 2018-05-28 10:59 UTC (permalink / raw)
  To: Oliver Neukum
  Cc: dpenkler, steve_bayless, gregkh, pankaj.adhikari, guido.kiener,
	linux-usb

Zitat von Oliver Neukum <oneukum@suse.com>:

> Am Donnerstag, den 24.05.2018, 12:59 +0000 schrieb guido@kiener-
> muenchen.de:
>> Zitat von Oliver Neukum <oneukum@suse.com>:
>>
>> > Am Donnerstag, den 17.05.2018, 19:03 +0200 schrieb Guido Kiener:
>> > > +static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
>> > > +                                   unsigned int __user *arg)
>> > > +{
>> > > +       struct usbtmc_device_data *data = file_data->data;
>> > > +       struct device *dev = &data->intf->dev;
>> > > +       int rv;
>> > > +       unsigned int timeout;
>> > > +       unsigned long expire;
>> > > +
>> > > +       if (!data->iin_ep_present) {
>> > > +               dev_dbg(dev, "no interrupt endpoint present\n");
>> > > +               return -EFAULT;
>> > > +       }
>> > > +
>> > > +       if (get_user(timeout, arg))
>> > > +               return -EFAULT;
>> > > +
>> > > +       expire = msecs_to_jiffies(timeout);
>> > > +
>> > > +       mutex_unlock(&data->io_mutex);
>> >
>> > There is such a thing as threads sharing file descriptors.
>> > That leads to the question what happens to the mutex if this
>> > ioctl() is called multiple times.
>> >
>> > 	Regards
>> > 		Oliver
>>
>> Multiple threads can wait with the same or different file descriptors.
>> When an SRQ interrupt occurs, all threads and file descriptors are
>> informed concurrently with wake_up_interruptible_all(&data->waitq);
>> The "_all" is already fixed in 02/12.
>
> No, the problem is that you will underflow io->mutex
>
Don't worry. The function usbtmc488_ioctl_wait_srq is called by
usbtmc_ioctl which already locks the mutex. See
https://elixir.bootlin.com/linux/v4.17-rc7/source/drivers/usb/class/usbtmc.c#L1189
So the mutex is just unlocked here to allow other threads to still communicate
with the device.

Regards,

Guido
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-25 11:17 Oliver Neukum
  0 siblings, 0 replies; 11+ messages in thread
From: Oliver Neukum @ 2018-05-25 11:17 UTC (permalink / raw)
  To: guido
  Cc: dpenkler, steve_bayless, gregkh, pankaj.adhikari, guido.kiener,
	linux-usb

Am Donnerstag, den 24.05.2018, 12:59 +0000 schrieb guido@kiener-
muenchen.de:
> Zitat von Oliver Neukum <oneukum@suse.com>:
> 
> > Am Donnerstag, den 17.05.2018, 19:03 +0200 schrieb Guido Kiener:
> > > +static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
> > > +                                   unsigned int __user *arg)
> > > +{
> > > +       struct usbtmc_device_data *data = file_data->data;
> > > +       struct device *dev = &data->intf->dev;
> > > +       int rv;
> > > +       unsigned int timeout;
> > > +       unsigned long expire;
> > > +
> > > +       if (!data->iin_ep_present) {
> > > +               dev_dbg(dev, "no interrupt endpoint present\n");
> > > +               return -EFAULT;
> > > +       }
> > > +
> > > +       if (get_user(timeout, arg))
> > > +               return -EFAULT;
> > > +
> > > +       expire = msecs_to_jiffies(timeout);
> > > +
> > > +       mutex_unlock(&data->io_mutex);
> > 
> > There is such a thing as threads sharing file descriptors.
> > That leads to the question what happens to the mutex if this
> > ioctl() is called multiple times.
> > 
> > 	Regards
> > 		Oliver
> 
> Multiple threads can wait with the same or different file descriptors.
> When an SRQ interrupt occurs, all threads and file descriptors are
> informed concurrently with wake_up_interruptible_all(&data->waitq);
> The "_all" is already fixed in 02/12.

No, the problem is that you will underflow io->mutex

	Regards
		Oliver
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-24 12:59 Guido Kiener
  0 siblings, 0 replies; 11+ messages in thread
From: Guido Kiener @ 2018-05-24 12:59 UTC (permalink / raw)
  To: Oliver Neukum
  Cc: dpenkler, steve_bayless, gregkh, pankaj.adhikari, guido.kiener,
	linux-usb

Zitat von Oliver Neukum <oneukum@suse.com>:

> Am Donnerstag, den 17.05.2018, 19:03 +0200 schrieb Guido Kiener:
>> +static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
>> +                                   unsigned int __user *arg)
>> +{
>> +       struct usbtmc_device_data *data = file_data->data;
>> +       struct device *dev = &data->intf->dev;
>> +       int rv;
>> +       unsigned int timeout;
>> +       unsigned long expire;
>> +
>> +       if (!data->iin_ep_present) {
>> +               dev_dbg(dev, "no interrupt endpoint present\n");
>> +               return -EFAULT;
>> +       }
>> +
>> +       if (get_user(timeout, arg))
>> +               return -EFAULT;
>> +
>> +       expire = msecs_to_jiffies(timeout);
>> +
>> +       mutex_unlock(&data->io_mutex);
>
> There is such a thing as threads sharing file descriptors.
> That leads to the question what happens to the mutex if this
> ioctl() is called multiple times.
>
> 	Regards
> 		Oliver

Multiple threads can wait with the same or different file descriptors.
When an SRQ interrupt occurs, all threads and file descriptors are
informed concurrently with wake_up_interruptible_all(&data->waitq);
The "_all" is already fixed in 02/12.

Regards,

Guido
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-23 12:08 Oliver Neukum
  0 siblings, 0 replies; 11+ messages in thread
From: Oliver Neukum @ 2018-05-23 12:08 UTC (permalink / raw)
  To: Guido Kiener, dpenkler, steve_bayless, gregkh, pankaj.adhikari,
	guido.kiener, linux-usb

Am Donnerstag, den 17.05.2018, 19:03 +0200 schrieb Guido Kiener:
> +static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
> +                                   unsigned int __user *arg)
> +{
> +       struct usbtmc_device_data *data = file_data->data;
> +       struct device *dev = &data->intf->dev;
> +       int rv;
> +       unsigned int timeout;
> +       unsigned long expire;
> +
> +       if (!data->iin_ep_present) {
> +               dev_dbg(dev, "no interrupt endpoint present\n");
> +               return -EFAULT;
> +       }
> +
> +       if (get_user(timeout, arg))
> +               return -EFAULT;
> +
> +       expire = msecs_to_jiffies(timeout);
> +
> +       mutex_unlock(&data->io_mutex);

There is such a thing as threads sharing file descriptors.
That leads to the question what happens to the mutex if this
ioctl() is called multiple times.

	Regards
		Oliver
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-18 15:17 Guido Kiener
  0 siblings, 0 replies; 11+ messages in thread
From: Guido Kiener @ 2018-05-18 15:17 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-usb, guido.kiener, pankaj.adhikari, steve_bayless, dpenkler

Zitat von Greg KH <gregkh@linuxfoundation.org>:

> On Fri, May 18, 2018 at 03:02:10PM +0000, guido@kiener-muenchen.de wrote:
>>
>> Zitat von Greg KH <gregkh@linuxfoundation.org>:
>>
>> > On Thu, May 17, 2018 at 07:03:31PM +0200, Guido Kiener wrote:
>> > > @@ -2420,8 +2476,8 @@ static int usbtmc_probe(struct  
>> usb_interface *intf,
>> > >
>> > >  	retcode = usb_register_dev(intf, &usbtmc_class);
>> > >  	if (retcode) {
>> > > -		dev_err(&intf->dev, "Not able to get a minor"
>> > > -			" (base %u, slice default): %d\n", USBTMC_MINOR_BASE,
>> > > +		dev_err(&intf->dev, "Not able to get a minor (base %u, slice
>> > > default): %d\n",
>> > > +			USBTMC_MINOR_BASE,
>> > >  			retcode);
>> >
>> > Nice change, but totally not relevant for this specific patch :(
>>
>> Extra patch or just omit?
>
> Extra patch please :)
>
>> I thought kernel message must not be broken due to rule 80 characters per
>> line.
>
> You are correct, just don't try to "sneak" it into a patch that does
> something totally different.
>

Thank you very much for you review.
I will send the next "version" after weekend or after my holiday.

Best regards,

Guido

> thanks,
>
> greg k-h
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-18 15:07 Greg Kroah-Hartman
  0 siblings, 0 replies; 11+ messages in thread
From: Greg Kroah-Hartman @ 2018-05-18 15:07 UTC (permalink / raw)
  To: guido; +Cc: linux-usb, guido.kiener, pankaj.adhikari, steve_bayless, dpenkler

On Fri, May 18, 2018 at 03:02:10PM +0000, guido@kiener-muenchen.de wrote:
> 
> Zitat von Greg KH <gregkh@linuxfoundation.org>:
> 
> > On Thu, May 17, 2018 at 07:03:31PM +0200, Guido Kiener wrote:
> > > @@ -2420,8 +2476,8 @@ static int usbtmc_probe(struct usb_interface *intf,
> > > 
> > >  	retcode = usb_register_dev(intf, &usbtmc_class);
> > >  	if (retcode) {
> > > -		dev_err(&intf->dev, "Not able to get a minor"
> > > -			" (base %u, slice default): %d\n", USBTMC_MINOR_BASE,
> > > +		dev_err(&intf->dev, "Not able to get a minor (base %u, slice
> > > default): %d\n",
> > > +			USBTMC_MINOR_BASE,
> > >  			retcode);
> > 
> > Nice change, but totally not relevant for this specific patch :(
> 
> Extra patch or just omit?

Extra patch please :)

> I thought kernel message must not be broken due to rule 80 characters per
> line.

You are correct, just don't try to "sneak" it into a patch that does
something totally different.

thanks,

greg k-h
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-18 15:02 Guido Kiener
  0 siblings, 0 replies; 11+ messages in thread
From: Guido Kiener @ 2018-05-18 15:02 UTC (permalink / raw)
  To: Greg KH; +Cc: linux-usb, guido.kiener, pankaj.adhikari, steve_bayless, dpenkler

Zitat von Greg KH <gregkh@linuxfoundation.org>:

> On Thu, May 17, 2018 at 07:03:31PM +0200, Guido Kiener wrote:
>> @@ -2420,8 +2476,8 @@ static int usbtmc_probe(struct usb_interface *intf,
>>
>>  	retcode = usb_register_dev(intf, &usbtmc_class);
>>  	if (retcode) {
>> -		dev_err(&intf->dev, "Not able to get a minor"
>> -			" (base %u, slice default): %d\n", USBTMC_MINOR_BASE,
>> +		dev_err(&intf->dev, "Not able to get a minor (base %u, slice  
>> default): %d\n",
>> +			USBTMC_MINOR_BASE,
>>  			retcode);
>
> Nice change, but totally not relevant for this specific patch :(

Extra patch or just omit?
I thought kernel message must not be broken due to rule 80 characters  
per line.

>
>> diff --git a/include/uapi/linux/usb/tmc.h b/include/uapi/linux/usb/tmc.h
>> index 1540716de293..35b63530121d 100644
>> --- a/include/uapi/linux/usb/tmc.h
>> +++ b/include/uapi/linux/usb/tmc.h
>> @@ -96,6 +96,7 @@ struct usbtmc_message {
>>  #define USBTMC488_IOCTL_GOTO_LOCAL	_IO(USBTMC_IOC_NR, 20)
>>  #define USBTMC488_IOCTL_LOCAL_LOCKOUT	_IO(USBTMC_IOC_NR, 21)
>>  #define USBTMC488_IOCTL_TRIGGER		_IO(USBTMC_IOC_NR, 22)
>> +#define USBTMC488_IOCTL_WAIT_SRQ	_IOW(USBTMC_IOC_NR, 23, unsigned int)
>
> Again __u32?

Yes.

>
> thanks,
>
> greg k-h
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-18 13:38 Greg Kroah-Hartman
  0 siblings, 0 replies; 11+ messages in thread
From: Greg Kroah-Hartman @ 2018-05-18 13:38 UTC (permalink / raw)
  To: Guido Kiener
  Cc: linux-usb, guido.kiener, pankaj.adhikari, steve_bayless, dpenkler

On Thu, May 17, 2018 at 07:03:31PM +0200, Guido Kiener wrote:
> @@ -2420,8 +2476,8 @@ static int usbtmc_probe(struct usb_interface *intf,
>  
>  	retcode = usb_register_dev(intf, &usbtmc_class);
>  	if (retcode) {
> -		dev_err(&intf->dev, "Not able to get a minor"
> -			" (base %u, slice default): %d\n", USBTMC_MINOR_BASE,
> +		dev_err(&intf->dev, "Not able to get a minor (base %u, slice default): %d\n",
> +			USBTMC_MINOR_BASE,
>  			retcode);

Nice change, but totally not relevant for this specific patch :(

> diff --git a/include/uapi/linux/usb/tmc.h b/include/uapi/linux/usb/tmc.h
> index 1540716de293..35b63530121d 100644
> --- a/include/uapi/linux/usb/tmc.h
> +++ b/include/uapi/linux/usb/tmc.h
> @@ -96,6 +96,7 @@ struct usbtmc_message {
>  #define USBTMC488_IOCTL_GOTO_LOCAL	_IO(USBTMC_IOC_NR, 20)
>  #define USBTMC488_IOCTL_LOCAL_LOCKOUT	_IO(USBTMC_IOC_NR, 21)
>  #define USBTMC488_IOCTL_TRIGGER		_IO(USBTMC_IOC_NR, 22)
> +#define USBTMC488_IOCTL_WAIT_SRQ	_IOW(USBTMC_IOC_NR, 23, unsigned int)

Again __u32?

thanks,

greg k-h
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ
@ 2018-05-17 17:03 Guido Kiener
  0 siblings, 0 replies; 11+ messages in thread
From: Guido Kiener @ 2018-05-17 17:03 UTC (permalink / raw)
  To: gregkh, linux-usb, guido.kiener, pankaj.adhikari, steve_bayless,
	dpenkler
  Cc: Guido Kiener

Wait until an SRQ (service request) is received on the interrupt pipe
or until the given period of time is expired. In contrast to the
poll() function this ioctl does not return when other (a)synchronous
I/O operations fail with EPOLLERR.

Signed-off-by: Guido Kiener <guido.kiener@rohde-schwarz.com>
Reviewed-by: Steve Bayless <steve_bayless@keysight.com>
---
 drivers/usb/class/usbtmc.c   | 60 ++++++++++++++++++++++++++++++++++--
 include/uapi/linux/usb/tmc.h |  1 +
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
index de664a345e69..6b8b8510cfc4 100644
--- a/drivers/usb/class/usbtmc.c
+++ b/drivers/usb/class/usbtmc.c
@@ -594,6 +594,54 @@ static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data,
 	return rv;
 }
 
+static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
+				    unsigned int __user *arg)
+{
+	struct usbtmc_device_data *data = file_data->data;
+	struct device *dev = &data->intf->dev;
+	int rv;
+	unsigned int timeout;
+	unsigned long expire;
+
+	if (!data->iin_ep_present) {
+		dev_dbg(dev, "no interrupt endpoint present\n");
+		return -EFAULT;
+	}
+
+	if (get_user(timeout, arg))
+		return -EFAULT;
+
+	expire = msecs_to_jiffies(timeout);
+
+	mutex_unlock(&data->io_mutex);
+
+	rv = wait_event_interruptible_timeout(
+			data->waitq,
+			atomic_read(&file_data->srq_asserted) != 0 ||
+			atomic_read(&file_data->closing),
+			expire);
+
+	mutex_lock(&data->io_mutex);
+
+	/* Note! disconnect or close could be called in the meantime */
+	if (atomic_read(&file_data->closing) || data->zombie)
+		rv = -ENODEV;
+
+	if (rv < 0) {
+		/* dev can be invalid now! */
+		pr_debug("%s - wait interrupted %d\n", __func__, rv);
+		return rv;
+	}
+
+	if (rv == 0) {
+		dev_dbg(dev, "%s - wait timed out\n", __func__);
+		return -ETIMEDOUT;
+	}
+
+	dev_dbg(dev, "%s - srq asserted\n", __func__);
+	return 0;
+}
+
 static int usbtmc488_ioctl_simple(struct usbtmc_device_data *data,
 				void __user *arg, unsigned int cmd)
 {
@@ -2149,6 +2197,11 @@ static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 		retval = usbtmc488_ioctl_trigger(file_data);
 		break;
 
+	case USBTMC488_IOCTL_WAIT_SRQ:
+		retval = usbtmc488_ioctl_wait_srq(file_data,
+						  (unsigned int __user *)arg);
+		break;
+
 	case USBTMC_IOCTL_CANCEL_IO:
 		retval = usbtmc_ioctl_cancel_io(file_data);
 		break;
@@ -2290,6 +2343,7 @@ static void usbtmc_interrupt(struct urb *urb)
 	case -ESHUTDOWN:
 	case -EILSEQ:
 	case -ETIME:
+	case -EPIPE:
 		/* urb terminated, clean up */
 		dev_dbg(dev, "urb terminated, status: %d\n", status);
 		return;
@@ -2308,7 +2362,9 @@ static void usbtmc_free_int(struct usbtmc_device_data *data)
 		return;
 	usb_kill_urb(data->iin_urb);
 	kfree(data->iin_buffer);
+	data->iin_buffer = NULL;
 	usb_free_urb(data->iin_urb);
+	data->iin_urb = NULL;
 	kref_put(&data->kref, usbtmc_delete);
 }
 
@@ -2420,8 +2476,8 @@ static int usbtmc_probe(struct usb_interface *intf,
 
 	retcode = usb_register_dev(intf, &usbtmc_class);
 	if (retcode) {
-		dev_err(&intf->dev, "Not able to get a minor"
-			" (base %u, slice default): %d\n", USBTMC_MINOR_BASE,
+		dev_err(&intf->dev, "Not able to get a minor (base %u, slice default): %d\n",
+			USBTMC_MINOR_BASE,
 			retcode);
 		goto error_register;
 	}
diff --git a/include/uapi/linux/usb/tmc.h b/include/uapi/linux/usb/tmc.h
index 1540716de293..35b63530121d 100644
--- a/include/uapi/linux/usb/tmc.h
+++ b/include/uapi/linux/usb/tmc.h
@@ -96,6 +96,7 @@ struct usbtmc_message {
 #define USBTMC488_IOCTL_GOTO_LOCAL	_IO(USBTMC_IOC_NR, 20)
 #define USBTMC488_IOCTL_LOCAL_LOCKOUT	_IO(USBTMC_IOC_NR, 21)
 #define USBTMC488_IOCTL_TRIGGER		_IO(USBTMC_IOC_NR, 22)
+#define USBTMC488_IOCTL_WAIT_SRQ	_IOW(USBTMC_IOC_NR, 23, unsigned int)
 
 /* Cancel and cleanup asynchronous calls */
 #define USBTMC_IOCTL_CANCEL_IO		_IO(USBTMC_IOC_NR, 35)

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2018-05-28 12:36 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-23 16:33 [07/12] usb: usbtmc: Add ioctl USBTMC488_IOCTL_WAIT_SRQ Greg Kroah-Hartman
  -- strict thread matches above, loose matches on Subject: below --
2018-05-28 12:36 Oliver Neukum
2018-05-28 10:59 Guido Kiener
2018-05-25 11:17 Oliver Neukum
2018-05-24 12:59 Guido Kiener
2018-05-23 12:08 Oliver Neukum
2018-05-18 15:17 Guido Kiener
2018-05-18 15:07 Greg Kroah-Hartman
2018-05-18 15:02 Guido Kiener
2018-05-18 13:38 Greg Kroah-Hartman
2018-05-17 17:03 Guido Kiener

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.