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