diff options
author | Mark McLoughlin <markmc@redhat.com> | 2008-12-15 07:58:27 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-01-06 13:44:34 -0500 |
commit | 63d12556703f17817a46e140704360b29b851bad (patch) | |
tree | be9741e515a075010e2fbb217ea0c41b85613ca2 /drivers/virtio/virtio_pci.c | |
parent | 0aa0dc41bfd993491c2344870eee7a3b218551fb (diff) |
virtio: do not statically allocate root device
We shouldn't be statically allocating the root device object,
so dynamically allocate it using root_device_register()
instead.
Also avoids this warning from 'rmmod virtio_pci':
Device 'virtio-pci' does not have a release() function, it is broken and must be fixed
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/virtio/virtio_pci.c')
-rw-r--r-- | drivers/virtio/virtio_pci.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 265fdf2d1276..bef6b45e8a5c 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
@@ -73,10 +73,7 @@ MODULE_DEVICE_TABLE(pci, virtio_pci_id_table); | |||
73 | /* A PCI device has it's own struct device and so does a virtio device so | 73 | /* A PCI device has it's own struct device and so does a virtio device so |
74 | * we create a place for the virtio devices to show up in sysfs. I think it | 74 | * we create a place for the virtio devices to show up in sysfs. I think it |
75 | * would make more sense for virtio to not insist on having it's own device. */ | 75 | * would make more sense for virtio to not insist on having it's own device. */ |
76 | static struct device virtio_pci_root = { | 76 | static struct device *virtio_pci_root; |
77 | .parent = NULL, | ||
78 | .init_name = "virtio-pci", | ||
79 | }; | ||
80 | 77 | ||
81 | /* Convert a generic virtio device to our structure */ | 78 | /* Convert a generic virtio device to our structure */ |
82 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) | 79 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) |
@@ -343,7 +340,7 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, | |||
343 | if (vp_dev == NULL) | 340 | if (vp_dev == NULL) |
344 | return -ENOMEM; | 341 | return -ENOMEM; |
345 | 342 | ||
346 | vp_dev->vdev.dev.parent = &virtio_pci_root; | 343 | vp_dev->vdev.dev.parent = virtio_pci_root; |
347 | vp_dev->vdev.dev.release = virtio_pci_release_dev; | 344 | vp_dev->vdev.dev.release = virtio_pci_release_dev; |
348 | vp_dev->vdev.config = &virtio_pci_config_ops; | 345 | vp_dev->vdev.config = &virtio_pci_config_ops; |
349 | vp_dev->pci_dev = pci_dev; | 346 | vp_dev->pci_dev = pci_dev; |
@@ -437,13 +434,13 @@ static int __init virtio_pci_init(void) | |||
437 | { | 434 | { |
438 | int err; | 435 | int err; |
439 | 436 | ||
440 | err = device_register(&virtio_pci_root); | 437 | virtio_pci_root = root_device_register("virtio-pci"); |
441 | if (err) | 438 | if (IS_ERR(virtio_pci_root)) |
442 | return err; | 439 | return PTR_ERR(virtio_pci_root); |
443 | 440 | ||
444 | err = pci_register_driver(&virtio_pci_driver); | 441 | err = pci_register_driver(&virtio_pci_driver); |
445 | if (err) | 442 | if (err) |
446 | device_unregister(&virtio_pci_root); | 443 | device_unregister(virtio_pci_root); |
447 | 444 | ||
448 | return err; | 445 | return err; |
449 | } | 446 | } |
@@ -452,8 +449,8 @@ module_init(virtio_pci_init); | |||
452 | 449 | ||
453 | static void __exit virtio_pci_exit(void) | 450 | static void __exit virtio_pci_exit(void) |
454 | { | 451 | { |
455 | device_unregister(&virtio_pci_root); | ||
456 | pci_unregister_driver(&virtio_pci_driver); | 452 | pci_unregister_driver(&virtio_pci_driver); |
453 | root_device_unregister(virtio_pci_root); | ||
457 | } | 454 | } |
458 | 455 | ||
459 | module_exit(virtio_pci_exit); | 456 | module_exit(virtio_pci_exit); |