aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/tty/hvc/virtio_console.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/tty/hvc/virtio_console.c b/drivers/tty/hvc/virtio_console.c
index 896a2ced1d27..ad2520b1e03f 100644
--- a/drivers/tty/hvc/virtio_console.c
+++ b/drivers/tty/hvc/virtio_console.c
@@ -1462,6 +1462,17 @@ static void control_work_handler(struct work_struct *work)
1462 spin_unlock(&portdev->cvq_lock); 1462 spin_unlock(&portdev->cvq_lock);
1463} 1463}
1464 1464
1465static void out_intr(struct virtqueue *vq)
1466{
1467 struct port *port;
1468
1469 port = find_port_by_vq(vq->vdev->priv, vq);
1470 if (!port)
1471 return;
1472
1473 wake_up_interruptible(&port->waitqueue);
1474}
1475
1465static void in_intr(struct virtqueue *vq) 1476static void in_intr(struct virtqueue *vq)
1466{ 1477{
1467 struct port *port; 1478 struct port *port;
@@ -1566,7 +1577,7 @@ static int init_vqs(struct ports_device *portdev)
1566 */ 1577 */
1567 j = 0; 1578 j = 0;
1568 io_callbacks[j] = in_intr; 1579 io_callbacks[j] = in_intr;
1569 io_callbacks[j + 1] = NULL; 1580 io_callbacks[j + 1] = out_intr;
1570 io_names[j] = "input"; 1581 io_names[j] = "input";
1571 io_names[j + 1] = "output"; 1582 io_names[j + 1] = "output";
1572 j += 2; 1583 j += 2;
@@ -1580,7 +1591,7 @@ static int init_vqs(struct ports_device *portdev)
1580 for (i = 1; i < nr_ports; i++) { 1591 for (i = 1; i < nr_ports; i++) {
1581 j += 2; 1592 j += 2;
1582 io_callbacks[j] = in_intr; 1593 io_callbacks[j] = in_intr;
1583 io_callbacks[j + 1] = NULL; 1594 io_callbacks[j + 1] = out_intr;
1584 io_names[j] = "input"; 1595 io_names[j] = "input";
1585 io_names[j + 1] = "output"; 1596 io_names[j + 1] = "output";
1586 } 1597 }