Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 180818
b: refs/heads/master
c: 7177876
h: refs/heads/master
v: v3
  • Loading branch information
Amit Shah authored and Rusty Russell committed Feb 24, 2010
1 parent ef6cdfb commit 39fe778
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a9cdd4855738906043b8131cfe8055d6cde88ffe
refs/heads/master: 7177876fea8306a6f49400d11f5913bf9b3b5e5f
41 changes: 41 additions & 0 deletions trunk/drivers/char/virtio_console.c
Original file line number Diff line number Diff line change
Expand Up @@ -1448,6 +1448,36 @@ static int __devinit virtcons_probe(struct virtio_device *vdev)
return err;
}

static void virtcons_remove(struct virtio_device *vdev)
{
struct ports_device *portdev;
struct port *port, *port2;
struct port_buffer *buf;
unsigned int len;

portdev = vdev->priv;

cancel_work_sync(&portdev->control_work);
cancel_work_sync(&portdev->config_work);

list_for_each_entry_safe(port, port2, &portdev->ports, list)
remove_port(port);

unregister_chrdev(portdev->chr_major, "virtio-portsdev");

while ((buf = portdev->c_ivq->vq_ops->get_buf(portdev->c_ivq, &len)))
free_buf(buf);

while ((buf = portdev->c_ivq->vq_ops->detach_unused_buf(portdev->c_ivq)))
free_buf(buf);

vdev->config->del_vqs(vdev);
kfree(portdev->in_vqs);
kfree(portdev->out_vqs);

kfree(portdev);
}

static struct virtio_device_id id_table[] = {
{ VIRTIO_ID_CONSOLE, VIRTIO_DEV_ANY_ID },
{ 0 },
Expand All @@ -1465,6 +1495,7 @@ static struct virtio_driver virtio_console = {
.driver.owner = THIS_MODULE,
.id_table = id_table,
.probe = virtcons_probe,
.remove = virtcons_remove,
.config_changed = config_intr,
};

Expand All @@ -1488,7 +1519,17 @@ static int __init init(void)

return register_virtio_driver(&virtio_console);
}

static void __exit fini(void)
{
unregister_virtio_driver(&virtio_console);

class_destroy(pdrvdata.class);
if (pdrvdata.debugfs_dir)
debugfs_remove_recursive(pdrvdata.debugfs_dir);
}
module_init(init);
module_exit(fini);

MODULE_DEVICE_TABLE(virtio, id_table);
MODULE_DESCRIPTION("Virtio console driver");
Expand Down

0 comments on commit 39fe778

Please sign in to comment.