From: Anthony Liguori <aliguori@us.ibm.com>
To: Mark McLoughlin <markmc@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>,
linux-kernel <linux-kernel@vger.kernel.org>,
kvm <kvm@vger.kernel.org>, Jiri Slaby <jirislaby@gmail.com>,
Greg KH <gregkh@suse.de>
Subject: Re: [PATCH 2/2] virtio: do not statically allocate root device
Date: Mon, 08 Dec 2008 08:43:02 -0600 [thread overview]
Message-ID: <493D3276.5040506@us.ibm.com> (raw)
In-Reply-To: <1228736980-19539-2-git-send-email-markmc@redhat.com>
Mark McLoughlin wrote:
> Apparently we shouldn't be statically allocating the root device
> object, so dynamically allocate it instead.
>
> Also add a release() function to avoid this warning:
>
> Device 'virtio-pci' does not have a release() function, it is broken and must be fixed
>
Is it really better to dynamically allocate the root device than
statically allocate it? Is the advice that we shouldn't statically
allocate a device really a suggestion that if you're doing that, you're
using struct device wrong?
If so, this conversion should be equally wrong. Have you chosen to keep
this device so that your initrd work-around continues to work as-is?
What exactly is the work around and is there a less hackish way we could
support it?
Regards,
Anthony Liguori
> Signed-off-by: Mark McLoughlin <markmc@redhat.com>
> Cc: Anthony Liguori <aliguori@us.ibm.com>
> ---
> drivers/virtio/virtio_pci.c | 48 +++++++++++++++++++++++++++++++++++-------
> 1 files changed, 40 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
> index 265fdf2..939e0b4 100644
> --- a/drivers/virtio/virtio_pci.c
> +++ b/drivers/virtio/virtio_pci.c
> @@ -73,10 +73,42 @@ MODULE_DEVICE_TABLE(pci, virtio_pci_id_table);
> /* A PCI device has it's own struct device and so does a virtio device so
> * we create a place for the virtio devices to show up in sysfs. I think it
> * would make more sense for virtio to not insist on having it's own device. */
> -static struct device virtio_pci_root = {
> - .parent = NULL,
> - .init_name = "virtio-pci",
> -};
> +static struct device *virtio_pci_root;
> +
> +static void virtio_pci_release_root(struct device *root)
> +{
> + kfree(root);
> +}
> +
> +static int virtio_pci_init_root(void)
> +{
> + struct device *root;
> + int err = -ENOMEM;
> +
> + root = kzalloc(sizeof(struct device), GFP_KERNEL);
> + if (root == NULL)
> + goto out;
> +
> + err = dev_set_name(root, "virtio-pci");
> + if (err)
> + goto free_root;
> +
> + err = device_register(root);
> + if (err)
> + goto free_root;
> +
> + root->parent = NULL;
> + root->release = virtio_pci_release_root;
> +
> + virtio_pci_root = root;
> +
> + return 0;
> +
> +free_root:
> + kfree(root);
> +out:
> + return err;
> +}
>
> /* Convert a generic virtio device to our structure */
> static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev)
> @@ -343,7 +375,7 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev,
> if (vp_dev == NULL)
> return -ENOMEM;
>
> - vp_dev->vdev.dev.parent = &virtio_pci_root;
> + vp_dev->vdev.dev.parent = virtio_pci_root;
> vp_dev->vdev.dev.release = virtio_pci_release_dev;
> vp_dev->vdev.config = &virtio_pci_config_ops;
> vp_dev->pci_dev = pci_dev;
> @@ -437,13 +469,13 @@ static int __init virtio_pci_init(void)
> {
> int err;
>
> - err = device_register(&virtio_pci_root);
> + err = virtio_pci_init_root();
> if (err)
> return err;
>
> err = pci_register_driver(&virtio_pci_driver);
> if (err)
> - device_unregister(&virtio_pci_root);
> + device_unregister(virtio_pci_root);
>
> return err;
> }
> @@ -452,8 +484,8 @@ module_init(virtio_pci_init);
>
> static void __exit virtio_pci_exit(void)
> {
> - device_unregister(&virtio_pci_root);
> pci_unregister_driver(&virtio_pci_driver);
> + device_unregister(virtio_pci_root);
> }
>
> module_exit(virtio_pci_exit);
>
next prev parent reply other threads:[~2008-12-08 14:43 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-04 12:44 [PATCH] virtio: make PCI devices take a virtio_pci module ref Mark McLoughlin
2008-12-04 22:46 ` Jiri Slaby
2008-12-05 9:02 ` Michael Tokarev
2008-12-05 13:17 ` Jiri Slaby
2008-12-05 14:55 ` Mark McLoughlin
2008-12-05 15:25 ` Jiri Slaby
2008-12-05 15:26 ` Greg KH
2008-12-05 18:30 ` Mark McLoughlin
2008-12-05 18:46 ` Greg KH
2008-12-08 11:49 ` [PATCH 1/2] virtio: add PCI device release() function Mark McLoughlin
2008-12-08 11:49 ` [PATCH 2/2] virtio: do not statically allocate root device Mark McLoughlin
2008-12-08 14:43 ` Anthony Liguori [this message]
2008-12-08 14:58 ` Mark McLoughlin
2008-12-05 18:33 ` [PATCH] virtio: make PCI devices take a virtio_pci module ref Mark McLoughlin
2008-12-05 15:43 ` Anthony Liguori
2008-12-05 17:22 ` Jiri Slaby
2008-12-05 18:36 ` Mark McLoughlin
2008-12-05 18:54 ` Anthony Liguori
2008-12-07 8:30 ` Rusty Russell
2008-12-07 13:36 ` Jiri Slaby
2008-12-05 0:13 ` Rusty Russell
2008-12-05 15:07 ` Mark McLoughlin
2008-12-07 8:22 ` Rusty Russell
2008-12-08 13:03 ` Mark McLoughlin
2008-12-08 14:46 ` Anthony Liguori
2008-12-09 16:41 ` Mark McLoughlin
2008-12-09 16:57 ` Anthony Liguori
2008-12-09 18:16 ` Kay Sievers
2008-12-10 9:49 ` Mark McLoughlin
2008-12-10 12:02 ` Kay Sievers
2008-12-09 22:25 ` Jesse Barnes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=493D3276.5040506@us.ibm.com \
--to=aliguori@us.ibm.com \
--cc=gregkh@suse.de \
--cc=jirislaby@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=markmc@redhat.com \
--cc=rusty@rustcorp.com.au \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).