All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: Mark McLoughlin <markmc@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>, Greg KH <gregkh@suse.de>,
	Kay Sievers <kay.sievers@vrfy.org>,
	linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org
Subject: Re: [PATCH 1/4] driver core: add root_device_register()
Date: Fri, 12 Dec 2008 10:23:02 +0100	[thread overview]
Message-ID: <20081212102302.2a2671e2__30562.918194528$1229073907$gmane$org@gondolin> (raw)
In-Reply-To: <1229072209.4041.5.camel@blaa>

On Fri, 12 Dec 2008 08:56:49 +0000,
Mark McLoughlin <markmc@redhat.com> wrote:

> Yeah, I just figured it was a little overkill given the structure
> definition is three lines away. Here it is, though.

As you use it twice, I think it makes the code more readable.

> 
> Cheers,
> Mark.
> 
> From: Mark McLoughlin <markmc@redhat.com>
> Subject: [PATCH] driver core: add root_device_register()
> 
> Add support for allocating root device objects which group
> device objects under /sys/devices directories.
> 
> Also add a sysfs 'module' symlink which points to the owner
> of the root device object. This symlink will be used in virtio
> to allow userspace to determine which virtio bus implementation
> a given device is associated with.
> 
> [Includes suggestions from Cornelia Huck]
> 
> Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>

> ---
>  drivers/base/core.c    |   89 ++++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/device.h |   11 ++++++
>  2 files changed, 100 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 8c2cc26..05320af 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -1196,6 +1196,95 @@ EXPORT_SYMBOL_GPL(put_device);
>  EXPORT_SYMBOL_GPL(device_create_file);
>  EXPORT_SYMBOL_GPL(device_remove_file);
> 
> +struct root_device
> +{
> +	struct device dev;
> +	struct module *owner;
> +};
> +
> +#define to_root_device(dev) container_of(dev, struct root_device, dev)
> +
> +static void root_device_release(struct device *dev)
> +{
> +	kfree(to_root_device(dev));
> +}
> +
> +/**
> + * __root_device_register - allocate and register a root device
> + * @name: root device name
> + * @owner: owner module of the root device, usually THIS_MODULE
> + *
> + * This function allocates a root device and registers it
> + * using device_register(). In order to free the returned
> + * device, use root_device_unregister().
> + *
> + * Root devices are dummy devices which allow other devices
> + * to be grouped under /sys/devices. Use this function to
> + * allocate a root device and then use it as the parent of
> + * any device which should appear under /sys/devices/{name}
> + *
> + * The /sys/devices/{name} directory will also contain a
> + * 'module' symlink which points to the @owner directory
> + * in sysfs.
> + *
> + * Note: You probably want to use root_device_register().
> + */
> +struct device *__root_device_register(const char *name, struct module *owner)
> +{
> +	struct root_device *root;
> +	int err = -ENOMEM;
> +
> +	root = kzalloc(sizeof(struct root_device), GFP_KERNEL);
> +	if (!root)
> +		return ERR_PTR(err);
> +
> +	err = dev_set_name(&root->dev, name);
> +	if (err) {
> +		kfree(root);
> +		return ERR_PTR(err);
> +	}
> +
> +	root->dev.release = root_device_release;
> +
> +	err = device_register(&root->dev);
> +	if (err) {
> +		put_device(&root->dev);
> +		return ERR_PTR(err);
> +	}
> +
> +	if (owner) {
> +		struct module_kobject *mk = &owner->mkobj;
> +
> +		err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module");
> +		if (err) {
> +			device_unregister(&root->dev);
> +			return ERR_PTR(err);
> +		}
> +		root->owner = owner;
> +	}
> +
> +	return &root->dev;
> +}
> +EXPORT_SYMBOL_GPL(__root_device_register);
> +
> +/**
> + * root_device_unregister - unregister and free a root device
> + * @root: device going away.
> + *
> + * This function unregisters and cleans up a device that was created by
> + * root_device_register().
> + */
> +void root_device_unregister(struct device *dev)
> +{
> +	struct root_device *root = to_root_device(dev);
> +
> +	if (root->owner)
> +		sysfs_remove_link(&root->dev.kobj, "module");
> +
> +	device_unregister(dev);
> +}
> +EXPORT_SYMBOL_GPL(root_device_unregister);
> +
> 
>  static void device_create_release(struct device *dev)
>  {
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 1a3686d..9e02980 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -483,6 +483,17 @@ extern int device_rename(struct device *dev, char *new_name);
>  extern int device_move(struct device *dev, struct device *new_parent);
> 
>  /*
> + * Root device objects for grouping under /sys/devices
> + */
> +extern struct device *__root_device_register(const char *name,
> +					     struct module *owner);
> +static inline struct device *root_device_register(const char *name)
> +{
> +	return __root_device_register(name, THIS_MODULE);
> +}
> +extern void root_device_unregister(struct device *root);
> +
> +/*
>   * Manual binding of a device to driver. See drivers/base/bus.c
>   * for information on use.
>   */
> -- 
> 1.6.0.3
> 

  parent reply	other threads:[~2008-12-12  9:23 UTC|newest]

Thread overview: 86+ 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 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
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-10 17:44                   ` [PATCH 0/6] Clean up virtio device object handling [was Re: [PATCH] virtio: make PCI devices take a virtio_pci module ref] Mark McLoughlin
2008-12-10 17:44                     ` Mark McLoughlin
2008-12-10 17:45                     ` [PATCH 1/6] virtio: add PCI device release() function Mark McLoughlin
2008-12-10 17:45                       ` [PATCH 2/6] virtio: add register_virtio_root_device() Mark McLoughlin
2008-12-10 17:45                         ` [PATCH 3/6] virtio: do not statically allocate root device Mark McLoughlin
2008-12-10 17:45                           ` [PATCH 4/6] lguest: " Mark McLoughlin
2008-12-10 17:45                             ` [PATCH 5/6] kvm-s390: use register_virtio_root_device() Mark McLoughlin
2008-12-10 17:45                               ` [PATCH 6/6] lguest: struct device - replace bus_id with dev_name() Mark McLoughlin
2008-12-11  9:05                               ` [PATCH 5/6] kvm-s390: use register_virtio_root_device() Christian Borntraeger
2008-12-11 12:49                                 ` Cornelia Huck
2008-12-11 12:49                                   ` Cornelia Huck
2008-12-11  9:05                               ` Christian Borntraeger
2008-12-11 12:59                         ` [PATCH 2/6] virtio: add register_virtio_root_device() Cornelia Huck
2008-12-11 16:16                           ` Mark McLoughlin
2008-12-11 16:16                           ` Mark McLoughlin
2008-12-11 16:16                             ` [PATCH 1/4] driver core: add root_device_register() Mark McLoughlin
2008-12-11 16:16                               ` [PATCH 2/4] virtio: do not statically allocate root device Mark McLoughlin
2008-12-11 16:16                                 ` [PATCH 3/4] lguest: " Mark McLoughlin
2008-12-11 16:16                                   ` [PATCH 4/4] s390: remove s390_root_dev_*() Mark McLoughlin
2008-12-11 17:00                                     ` Cornelia Huck
2008-12-11 17:00                                       ` Cornelia Huck
2008-12-12  9:29                                       ` Cornelia Huck
2008-12-12  9:29                                       ` Cornelia Huck
2008-12-12  9:29                                         ` Cornelia Huck
2008-12-12  9:35                                         ` Mark McLoughlin
2008-12-12  9:35                                         ` Mark McLoughlin
2008-12-12  9:45                                           ` Martin Schwidefsky
2008-12-12  9:54                                             ` Martin Schwidefsky
2008-12-12  9:54                                               ` Martin Schwidefsky
2008-12-12  9:45                                           ` Martin Schwidefsky
2008-12-12  9:45                                           ` Cornelia Huck
2008-12-12  9:45                                           ` Cornelia Huck
2008-12-12 19:07                                           ` Greg KH
2008-12-12 19:07                                             ` Greg KH
2008-12-15 12:58                                             ` [PATCH 1/4] driver core: add root_device_register() Mark McLoughlin
2008-12-15 12:58                                               ` [PATCH 2/4] virtio: do not statically allocate root device Mark McLoughlin
2008-12-15 12:58                                                 ` [PATCH 3/4] lguest: " Mark McLoughlin
2008-12-15 12:58                                                   ` [PATCH 4/4] s390: remove s390_root_dev_*() Mark McLoughlin
2008-12-15 22:27                                                 ` [PATCH 2/4] virtio: do not statically allocate root device Rusty Russell
2008-12-15 22:27                                                 ` Rusty Russell
2008-12-11 17:00                                     ` [PATCH 4/4] s390: remove s390_root_dev_*() Cornelia Huck
2008-12-11 16:56                               ` [PATCH 1/4] driver core: add root_device_register() Cornelia Huck
2008-12-11 16:56                               ` Cornelia Huck
2008-12-11 18:23                                 ` Mark McLoughlin
2008-12-12  8:42                                   ` Cornelia Huck
2008-12-12  8:42                                   ` Cornelia Huck
2008-12-12  8:56                                     ` Mark McLoughlin
2008-12-12  8:56                                       ` Mark McLoughlin
2008-12-12  9:23                                       ` Cornelia Huck
2008-12-12  9:23                                       ` Cornelia Huck [this message]
2008-12-11 18:23                                 ` Mark McLoughlin
2008-12-11 12:59                         ` [PATCH 2/6] virtio: add register_virtio_root_device() Cornelia Huck
2008-12-10 18:07                     ` [PATCH 0/6] Clean up virtio device object handling [was Re: [PATCH] virtio: make PCI devices take a virtio_pci module ref] Kay Sievers
2008-12-10 18:07                     ` Kay Sievers
2008-12-09 22:25   ` [PATCH] virtio: make PCI devices take a virtio_pci module ref 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='20081212102302.2a2671e2__30562.918194528$1229073907$gmane$org@gondolin' \
    --to=cornelia.huck@de.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=gregkh@suse.de \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markmc@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.