virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] virtio: console: async notifications for host connect / disconnect
@ 2010-09-02 13:17 Amit Shah
  2010-09-02 13:17 ` [PATCH 1/3] virtio: console: Send SIGIO to processes that request it for host events Amit Shah
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Amit Shah @ 2010-09-02 13:17 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Amit Shah, Virtualization List

Hey Rusty,

This patchset is on top of the previous one.

It sends a SIGIO signal to apps that request signals for host
activity. SIGIO is sent on host connect, disconnect as well as
hot-unplug (which can be seen as a special case of host disconnect).

Tested using several testcases in the test-virtserial repo:
http://fedorapeople.org/gitweb?p=amitshah/public_git/test-virtserial.git

Please apply.

Thanks,
Amit.

Amit Shah (3):
  virtio: console: Send SIGIO to processes that request it for host
    events
  virtio: console: Send SIGIO on new data arrival on ports
  virtio: console: Send SIGIO in case of port unplug

 drivers/char/virtio_console.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

-- 
1.7.2.2

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

* [PATCH 1/3] virtio: console: Send SIGIO to processes that request it for host events
  2010-09-02 13:17 [PATCH 0/3] virtio: console: async notifications for host connect / disconnect Amit Shah
@ 2010-09-02 13:17 ` Amit Shah
  2010-09-02 13:17 ` [PATCH 2/3] virtio: console: Send SIGIO on new data arrival on ports Amit Shah
  2010-09-02 13:17 ` [PATCH 3/3] virtio: console: Send SIGIO in case of port unplug Amit Shah
  2 siblings, 0 replies; 5+ messages in thread
From: Amit Shah @ 2010-09-02 13:17 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Amit Shah, Virtualization List

A process can request for SIGIO on host connect / disconnect events
using the O_ASYNC file flag using fcntl().

If that's requested, and if the guest-side connection for the port is
open, any host-side open/close events for that port will raise a SIGIO.
The process can then use poll() within the signal handler to find out
which port triggered the signal.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 drivers/char/virtio_console.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index 793817b..afbbc54 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -196,6 +196,9 @@ struct port {
 	/* The 'name' of the port that we expose via sysfs properties */
 	char *name;
 
+	/* We can notify apps of host connect / disconnect events via SIGIO */
+	struct fasync_struct *async_queue;
+
 	/* The 'id' to identify the port with the Host */
 	u32 id;
 
@@ -800,6 +803,14 @@ out:
 	return ret;
 }
 
+static int port_fops_fasync(int fd, struct file *filp, int mode)
+{
+	struct port *port;
+
+	port = filp->private_data;
+	return fasync_helper(fd, filp, mode, &port->async_queue);
+}
+
 /*
  * The file operations that we support: programs in the guest can open
  * a console device, read from it, write to it, poll for data and
@@ -813,6 +824,7 @@ static const struct file_operations port_fops = {
 	.write = port_fops_write,
 	.poll  = port_fops_poll,
 	.release = port_fops_release,
+	.fasync = port_fops_fasync,
 };
 
 /*
@@ -1071,6 +1083,12 @@ static unsigned int fill_queue(struct virtqueue *vq, spinlock_t *lock)
 	return nr_added_bufs;
 }
 
+static void send_sigio_to_port(struct port *port)
+{
+	if (port->async_queue && port->guest_connected)
+		kill_fasync(&port->async_queue, SIGIO, POLL_OUT);
+}
+
 static int add_port(struct ports_device *portdev, u32 id)
 {
 	char debugfs_name[16];
@@ -1093,6 +1111,7 @@ static int add_port(struct ports_device *portdev, u32 id)
 	port->name = NULL;
 	port->inbuf = NULL;
 	port->cons.hvc = NULL;
+	port->async_queue = NULL;
 
 	port->cons.ws.ws_row = port->cons.ws.ws_col = 0;
 
@@ -1347,6 +1366,12 @@ static void handle_control_message(struct ports_device *portdev,
 		spin_lock_irq(&port->outvq_lock);
 		reclaim_consumed_buffers(port);
 		spin_unlock_irq(&port->outvq_lock);
+
+		/*
+		 * If the guest is connected, it'll be interested in
+		 * knowing the host connection state changed.
+		 */
+		send_sigio_to_port(port);
 		break;
 	case VIRTIO_CONSOLE_PORT_NAME:
 		/*
-- 
1.7.2.2

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

* [PATCH 2/3] virtio: console: Send SIGIO on new data arrival on ports
  2010-09-02 13:17 [PATCH 0/3] virtio: console: async notifications for host connect / disconnect Amit Shah
  2010-09-02 13:17 ` [PATCH 1/3] virtio: console: Send SIGIO to processes that request it for host events Amit Shah
@ 2010-09-02 13:17 ` Amit Shah
  2010-09-02 13:17 ` [PATCH 3/3] virtio: console: Send SIGIO in case of port unplug Amit Shah
  2 siblings, 0 replies; 5+ messages in thread
From: Amit Shah @ 2010-09-02 13:17 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Amit Shah, Virtualization List

Send a SIGIO signal when new data arrives on a port. This is sent only
when the process has requested for the signal to be sent using fcntl().

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 drivers/char/virtio_console.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index afbbc54..a750d2b 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -1468,6 +1468,9 @@ static void in_intr(struct virtqueue *vq)
 
 	wake_up_interruptible(&port->waitqueue);
 
+	/* Send a SIGIO indicating new data in case the process asked for it */
+	send_sigio_to_port(port);
+
 	if (is_console_port(port) && hvc_poll(port->cons.hvc))
 		hvc_kick();
 }
-- 
1.7.2.2

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

* [PATCH 3/3] virtio: console: Send SIGIO in case of port unplug
  2010-09-02 13:17 [PATCH 0/3] virtio: console: async notifications for host connect / disconnect Amit Shah
  2010-09-02 13:17 ` [PATCH 1/3] virtio: console: Send SIGIO to processes that request it for host events Amit Shah
  2010-09-02 13:17 ` [PATCH 2/3] virtio: console: Send SIGIO on new data arrival on ports Amit Shah
@ 2010-09-02 13:17 ` Amit Shah
  2010-09-06  9:21   ` Rusty Russell
  2 siblings, 1 reply; 5+ messages in thread
From: Amit Shah @ 2010-09-02 13:17 UTC (permalink / raw)
  To: Rusty Russell; +Cc: Amit Shah, Virtualization List

If a port has registered for SIGIO signals, let the application
know that the port is getting unplugged.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 drivers/char/virtio_console.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index a750d2b..f7adfd3 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -1244,6 +1244,9 @@ static void unplug_port(struct port *port)
 		port->guest_connected = false;
 		port->host_connected = false;
 		wake_up_interruptible(&port->waitqueue);
+
+		/* Let the app know the port is going down. */
+		send_sigio_to_port(port);
 	}
 
 	if (is_console_port(port)) {
-- 
1.7.2.2

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

* Re: [PATCH 3/3] virtio: console: Send SIGIO in case of port unplug
  2010-09-02 13:17 ` [PATCH 3/3] virtio: console: Send SIGIO in case of port unplug Amit Shah
@ 2010-09-06  9:21   ` Rusty Russell
  0 siblings, 0 replies; 5+ messages in thread
From: Rusty Russell @ 2010-09-06  9:21 UTC (permalink / raw)
  To: Amit Shah; +Cc: Virtualization List

On Thu, 2 Sep 2010 10:47:54 pm Amit Shah wrote:
> If a port has registered for SIGIO signals, let the application
> know that the port is getting unplugged.
> 
> Signed-off-by: Amit Shah <amit.shah@redhat.com>

Thanks Amit, these patches were really well organized and nice to read.

Applied them all...
Rusty.

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

end of thread, other threads:[~2010-09-06  9:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-02 13:17 [PATCH 0/3] virtio: console: async notifications for host connect / disconnect Amit Shah
2010-09-02 13:17 ` [PATCH 1/3] virtio: console: Send SIGIO to processes that request it for host events Amit Shah
2010-09-02 13:17 ` [PATCH 2/3] virtio: console: Send SIGIO on new data arrival on ports Amit Shah
2010-09-02 13:17 ` [PATCH 3/3] virtio: console: Send SIGIO in case of port unplug Amit Shah
2010-09-06  9:21   ` Rusty Russell

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).