diff options
Diffstat (limited to 'drivers/char/virtio_console.c')
-rw-r--r-- | drivers/char/virtio_console.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index 0f69c5ec0ecd..7dc855b074d3 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c | |||
@@ -1314,6 +1314,17 @@ static void control_work_handler(struct work_struct *work) | |||
1314 | spin_unlock(&portdev->cvq_lock); | 1314 | spin_unlock(&portdev->cvq_lock); |
1315 | } | 1315 | } |
1316 | 1316 | ||
1317 | static void out_intr(struct virtqueue *vq) | ||
1318 | { | ||
1319 | struct port *port; | ||
1320 | |||
1321 | port = find_port_by_vq(vq->vdev->priv, vq); | ||
1322 | if (!port) | ||
1323 | return; | ||
1324 | |||
1325 | wake_up_interruptible(&port->waitqueue); | ||
1326 | } | ||
1327 | |||
1317 | static void in_intr(struct virtqueue *vq) | 1328 | static void in_intr(struct virtqueue *vq) |
1318 | { | 1329 | { |
1319 | struct port *port; | 1330 | struct port *port; |
@@ -1430,7 +1441,7 @@ static int init_vqs(struct ports_device *portdev) | |||
1430 | */ | 1441 | */ |
1431 | j = 0; | 1442 | j = 0; |
1432 | io_callbacks[j] = in_intr; | 1443 | io_callbacks[j] = in_intr; |
1433 | io_callbacks[j + 1] = NULL; | 1444 | io_callbacks[j + 1] = out_intr; |
1434 | io_names[j] = "input"; | 1445 | io_names[j] = "input"; |
1435 | io_names[j + 1] = "output"; | 1446 | io_names[j + 1] = "output"; |
1436 | j += 2; | 1447 | j += 2; |
@@ -1444,7 +1455,7 @@ static int init_vqs(struct ports_device *portdev) | |||
1444 | for (i = 1; i < nr_ports; i++) { | 1455 | for (i = 1; i < nr_ports; i++) { |
1445 | j += 2; | 1456 | j += 2; |
1446 | io_callbacks[j] = in_intr; | 1457 | io_callbacks[j] = in_intr; |
1447 | io_callbacks[j + 1] = NULL; | 1458 | io_callbacks[j + 1] = out_intr; |
1448 | io_names[j] = "input"; | 1459 | io_names[j] = "input"; |
1449 | io_names[j + 1] = "output"; | 1460 | io_names[j + 1] = "output"; |
1450 | } | 1461 | } |