virtio: Allow virtio to be modular and used by modules

This is needed for the virtio PCI device to be compiled as a module.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 drivers/virtio/Kconfig       |    4 ++--
 drivers/virtio/virtio.c      |    9 +++++++++
 drivers/virtio/virtio_ring.c |    4 ++++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff -r 4f82b7bda8ff drivers/virtio/Kconfig
--- a/drivers/virtio/Kconfig	Thu Jan 24 12:22:46 2008 +1100
+++ b/drivers/virtio/Kconfig	Thu Jan 24 12:30:07 2008 +1100
@@ -1,8 +1,8 @@
 # Virtio always gets selected by whoever wants it.
 config VIRTIO
-	bool
+	tristate
 
 # Similarly the virtio ring implementation.
 config VIRTIO_RING
-	bool
+	tristate
 	depends on VIRTIO
diff -r 4f82b7bda8ff drivers/virtio/virtio.c
--- a/drivers/virtio/virtio.c	Thu Jan 24 12:22:46 2008 +1100
+++ b/drivers/virtio/virtio.c	Thu Jan 24 12:30:07 2008 +1100
@@ -70,6 +70,7 @@ static int virtio_uevent(struct device *
 
 static struct bus_type virtio_bus = {
 	.name  = "virtio",
+	.owner = THIS_MODULE,
 	.match = virtio_dev_match,
 	.dev_attrs = virtio_dev_attrs,
 	.uevent = virtio_uevent,
@@ -162,4 +163,12 @@ static int virtio_init(void)
 		panic("virtio bus registration failed");
 	return 0;
 }
+
+static void __exit virtio_exit(void)
+{
+	bus_unregister(&virtio_bus);
+}
 core_initcall(virtio_init);
+module_exit(virtio_exit);
+
+MODULE_LICENSE("GPL");
diff -r 4f82b7bda8ff drivers/virtio/virtio_ring.c
--- a/drivers/virtio/virtio_ring.c	Thu Jan 24 12:22:46 2008 +1100
+++ b/drivers/virtio/virtio_ring.c	Thu Jan 24 12:30:07 2008 +1100
@@ -266,6 +266,7 @@ irqreturn_t vring_interrupt(int irq, voi
 
 	return IRQ_HANDLED;
 }
+EXPORT_SYMBOL_GPL(vring_interrupt);
 
 static struct virtqueue_ops vring_vq_ops = {
 	.add_buf = vring_add_buf,
@@ -318,9 +319,12 @@ struct virtqueue *vring_new_virtqueue(un
 
 	return &vq->vq;
 }
+EXPORT_SYMBOL_GPL(vring_new_virtqueue);
 
 void vring_del_virtqueue(struct virtqueue *vq)
 {
 	kfree(to_vvq(vq));
 }
+EXPORT_SYMBOL_GPL(vring_del_virtqueue);
 
+MODULE_LICENSE("GPL");
