linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read
@ 2020-05-02 19:31 Vasily Khoruzhick
  2020-05-02 19:31 ` [PATCH 1/2] ALSA: line6: hwdep: add support for O_NONBLOCK opening mode Vasily Khoruzhick
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Vasily Khoruzhick @ 2020-05-02 19:31 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Thomas Gleixner, Pavel Machek,
	Allison Randal, alsa-devel, linux-kernel
  Cc: Vasily Khoruzhick

This series adds support for polling and non-blocking read for hwdep
interface. This allows apps to listen to HW events without using busy
loop.

Example of app that uses hwdep interface for POD HD500 can be found
here: https://github.com/anarsoul/line6_hwdep_test

Vasily Khoruzhick (2):
  ALSA: line6: hwdep: add support for O_NONBLOCK opening mode
  ALSA: line6: Add poll callback for hwdep

 sound/usb/line6/driver.c | 20 ++++++++++++++++++++
 sound/usb/line6/driver.h |  1 +
 2 files changed, 21 insertions(+)

-- 
2.26.2


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

* [PATCH 1/2] ALSA: line6: hwdep: add support for O_NONBLOCK opening mode
  2020-05-02 19:31 [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Vasily Khoruzhick
@ 2020-05-02 19:31 ` Vasily Khoruzhick
  2020-05-02 19:31 ` [PATCH 2/2] ALSA: line6: Add poll callback for hwdep Vasily Khoruzhick
  2020-05-02 20:32 ` [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Takashi Iwai
  2 siblings, 0 replies; 5+ messages in thread
From: Vasily Khoruzhick @ 2020-05-02 19:31 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Thomas Gleixner, Pavel Machek,
	Allison Randal, alsa-devel, linux-kernel
  Cc: Vasily Khoruzhick

Currently line6 hwdep interface ignores O_NONBLOCK flag when
opening device and it renders it somewhat useless when using poll.

Check for O_NONBLOCK flag when opening device and don't block read()
if it is set.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
---
 sound/usb/line6/driver.c | 4 ++++
 sound/usb/line6/driver.h | 1 +
 2 files changed, 5 insertions(+)

diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
index 4f096685ed65..86adf87d57f0 100644
--- a/sound/usb/line6/driver.c
+++ b/sound/usb/line6/driver.c
@@ -550,6 +550,7 @@ static int line6_hwdep_open(struct snd_hwdep *hw, struct file *file)
 	/* NOTE: hwdep layer provides atomicity here */
 
 	line6->messages.active = 1;
+	line6->messages.nonblock = file->f_flags & O_NONBLOCK ? 1 : 0;
 
 	return 0;
 }
@@ -579,6 +580,9 @@ line6_hwdep_read(struct snd_hwdep *hwdep, char __user *buf, long count,
 	while (kfifo_len(&line6->messages.fifo) == 0) {
 		mutex_unlock(&line6->messages.read_lock);
 
+		if (line6->messages.nonblock)
+			return -EAGAIN;
+
 		rv = wait_event_interruptible(
 			line6->messages.wait_queue,
 			kfifo_len(&line6->messages.fifo) != 0);
diff --git a/sound/usb/line6/driver.h b/sound/usb/line6/driver.h
index e5e572ed5f30..1a4e3700c80c 100644
--- a/sound/usb/line6/driver.h
+++ b/sound/usb/line6/driver.h
@@ -163,6 +163,7 @@ struct usb_line6 {
 		struct mutex read_lock;
 		wait_queue_head_t wait_queue;
 		unsigned int active:1;
+		unsigned int nonblock:1;
 		STRUCT_KFIFO_REC_2(LINE6_BUFSIZE_LISTEN * LINE6_RAW_MESSAGES_MAXCOUNT)
 			fifo;
 	} messages;
-- 
2.26.2


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

* [PATCH 2/2] ALSA: line6: Add poll callback for hwdep
  2020-05-02 19:31 [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Vasily Khoruzhick
  2020-05-02 19:31 ` [PATCH 1/2] ALSA: line6: hwdep: add support for O_NONBLOCK opening mode Vasily Khoruzhick
@ 2020-05-02 19:31 ` Vasily Khoruzhick
  2020-05-02 20:32 ` [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Takashi Iwai
  2 siblings, 0 replies; 5+ messages in thread
From: Vasily Khoruzhick @ 2020-05-02 19:31 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Thomas Gleixner, Pavel Machek,
	Allison Randal, alsa-devel, linux-kernel
  Cc: Vasily Khoruzhick

At least POD HD500 uses message-based communication, both sides can
send messages. Add poll callback so application can wait for device
messages without using busy loop.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
---
 sound/usb/line6/driver.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
index 86adf87d57f0..7629116f570e 100644
--- a/sound/usb/line6/driver.c
+++ b/sound/usb/line6/driver.c
@@ -630,11 +630,27 @@ line6_hwdep_write(struct snd_hwdep *hwdep, const char __user *data, long count,
 	return rv;
 }
 
+static __poll_t
+line6_hwdep_poll(struct snd_hwdep *hwdep, struct file *file, poll_table *wait)
+{
+	__poll_t rv;
+	struct usb_line6 *line6 = hwdep->private_data;
+
+	poll_wait(file, &line6->messages.wait_queue, wait);
+
+	mutex_lock(&line6->messages.read_lock);
+	rv = kfifo_len(&line6->messages.fifo) == 0 ? 0 : EPOLLIN | EPOLLRDNORM;
+	mutex_unlock(&line6->messages.read_lock);
+
+	return rv;
+}
+
 static const struct snd_hwdep_ops hwdep_ops = {
 	.open    = line6_hwdep_open,
 	.release = line6_hwdep_release,
 	.read    = line6_hwdep_read,
 	.write   = line6_hwdep_write,
+	.poll    = line6_hwdep_poll,
 };
 
 /* Insert into circular buffer */
-- 
2.26.2


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

* Re: [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read
  2020-05-02 19:31 [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Vasily Khoruzhick
  2020-05-02 19:31 ` [PATCH 1/2] ALSA: line6: hwdep: add support for O_NONBLOCK opening mode Vasily Khoruzhick
  2020-05-02 19:31 ` [PATCH 2/2] ALSA: line6: Add poll callback for hwdep Vasily Khoruzhick
@ 2020-05-02 20:32 ` Takashi Iwai
  2020-05-02 21:45   ` Vasily Khoruzhick
  2 siblings, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2020-05-02 20:32 UTC (permalink / raw)
  To: Vasily Khoruzhick
  Cc: Jaroslav Kysela, Takashi Iwai, Thomas Gleixner, Pavel Machek,
	Allison Randal, alsa-devel, linux-kernel

On Sat, 02 May 2020 21:31:18 +0200,
Vasily Khoruzhick wrote:
> 
> This series adds support for polling and non-blocking read for hwdep
> interface. This allows apps to listen to HW events without using busy
> loop.
> 
> Example of app that uses hwdep interface for POD HD500 can be found
> here: https://github.com/anarsoul/line6_hwdep_test
> 
> Vasily Khoruzhick (2):
>   ALSA: line6: hwdep: add support for O_NONBLOCK opening mode
>   ALSA: line6: Add poll callback for hwdep

Looks like a nice extension.  Applied both patches now to for-next
branch.


thanks,

Takashi

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

* Re: [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read
  2020-05-02 20:32 ` [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Takashi Iwai
@ 2020-05-02 21:45   ` Vasily Khoruzhick
  0 siblings, 0 replies; 5+ messages in thread
From: Vasily Khoruzhick @ 2020-05-02 21:45 UTC (permalink / raw)
  To: Takashi Iwai
  Cc: Jaroslav Kysela, Takashi Iwai, Thomas Gleixner, Pavel Machek,
	Allison Randal, Linux-ALSA, linux-kernel

On Sat, May 2, 2020 at 1:32 PM Takashi Iwai <tiwai@suse.de> wrote:
>
> On Sat, 02 May 2020 21:31:18 +0200,
> Vasily Khoruzhick wrote:
> >
> > This series adds support for polling and non-blocking read for hwdep
> > interface. This allows apps to listen to HW events without using busy
> > loop.
> >
> > Example of app that uses hwdep interface for POD HD500 can be found
> > here: https://github.com/anarsoul/line6_hwdep_test
> >
> > Vasily Khoruzhick (2):
> >   ALSA: line6: hwdep: add support for O_NONBLOCK opening mode
> >   ALSA: line6: Add poll callback for hwdep
>
> Looks like a nice extension.  Applied both patches now to for-next
> branch.

Thanks for such a prompt response!

>
> thanks,
>
> Takashi

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

end of thread, other threads:[~2020-05-02 21:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-02 19:31 [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Vasily Khoruzhick
2020-05-02 19:31 ` [PATCH 1/2] ALSA: line6: hwdep: add support for O_NONBLOCK opening mode Vasily Khoruzhick
2020-05-02 19:31 ` [PATCH 2/2] ALSA: line6: Add poll callback for hwdep Vasily Khoruzhick
2020-05-02 20:32 ` [PATCH 0/2] ALSA: line6: hwdep: add support for poll and non-blocking read Takashi Iwai
2020-05-02 21:45   ` Vasily Khoruzhick

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).