public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@suse.de>, Kay Sievers <kay.sievers@vrfy.org>
Subject: [PATCH 33/54] driver core: remove fields from struct bus_type
Date: Fri,  2 Nov 2007 16:59:11 -0700	[thread overview]
Message-ID: <1194047972-9850-33-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20071102235758.GA9803@kroah.com>

struct bus_type is static everywhere in the kernel.  This moves the
kobject in the structure out of it, and a bunch of other private only to
the driver core fields are now moved to a private structure.  This lets
us dynamically create the backing kobject properly and gives us the
chance to be able to document to users exactly how to use the struct
bus_type as there are no fields they can improperly access.

Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 drivers/base/base.h     |   30 +++++++++++-
 drivers/base/bus.c      |  120 ++++++++++++++++++++++++++--------------------
 drivers/base/core.c     |    6 +-
 drivers/base/dd.c       |    4 +-
 drivers/base/driver.c   |    2 +-
 drivers/base/platform.c |    4 +-
 include/linux/device.h  |   12 +----
 7 files changed, 107 insertions(+), 71 deletions(-)

diff --git a/drivers/base/base.h b/drivers/base/base.h
index 7e309a4..ca6d273 100644
--- a/drivers/base/base.h
+++ b/drivers/base/base.h
@@ -1,6 +1,34 @@
 
-/* initialisation functions */
+/**
+ * struct bus_type_private - structure to hold the private to the driver core portions of the bus_type structure.
+ *
+ * @subsys - the struct kset that defines this bus.  This is the main kobject
+ * @drivers_kset - the list of drivers associated with this bus
+ * @devices_kset - the list of devices associated with this bus
+ * @klist_devices - the klist to iterate over the @devices_kset
+ * @klist_drivers - the klist to iterate over the @drivers_kset
+ * @bus_notifier - the bus notifier list for anything that cares about things
+ * on this bus.
+ * @bus - pointer back to the struct bus_type that this structure is associated
+ * with.
+ *
+ * This structure is the one that is the actual kobject allowing struct
+ * bus_type to be statically allocated safely.  Nothing outside of the driver
+ * core should ever touch these fields.
+ */
+struct bus_type_private {
+	struct kset subsys;
+	struct kset *drivers_kset;
+	struct kset *devices_kset;
+	struct klist klist_devices;
+	struct klist klist_drivers;
+	struct blocking_notifier_head bus_notifier;
+	unsigned int drivers_autoprobe:1;
+	struct bus_type *bus;
+};
+
 
+/* initialisation functions */
 extern int devices_init(void);
 extern int buses_init(void);
 extern int classes_init(void);
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index e502ca6..80a4919 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -18,7 +18,7 @@
 #include "power/power.h"
 
 #define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr)
-#define to_bus(obj) container_of(obj, struct bus_type, subsys.kobj)
+#define to_bus(obj) container_of(obj, struct bus_type_private, subsys.kobj)
 
 /*
  * sysfs bindings for drivers
@@ -33,13 +33,17 @@ static int __must_check bus_rescan_devices_helper(struct device *dev,
 
 static struct bus_type *bus_get(struct bus_type *bus)
 {
-	return bus ? container_of(kset_get(&bus->subsys),
-				struct bus_type, subsys) : NULL;
+	if (bus) {
+		kset_get(&bus->p->subsys);
+		return bus;
+	}
+	return NULL;
 }
 
 static void bus_put(struct bus_type *bus)
 {
-	kset_put(&bus->subsys);
+	if (bus)
+		kset_put(&bus->p->subsys);
 }
 
 static ssize_t
@@ -105,11 +109,11 @@ static ssize_t
 bus_attr_show(struct kobject * kobj, struct attribute * attr, char * buf)
 {
 	struct bus_attribute * bus_attr = to_bus_attr(attr);
-	struct bus_type * bus = to_bus(kobj);
+	struct bus_type_private *bus_priv = to_bus(kobj);
 	ssize_t ret = 0;
 
 	if (bus_attr->show)
-		ret = bus_attr->show(bus, buf);
+		ret = bus_attr->show(bus_priv->bus, buf);
 	return ret;
 }
 
@@ -118,11 +122,11 @@ bus_attr_store(struct kobject * kobj, struct attribute * attr,
 	       const char * buf, size_t count)
 {
 	struct bus_attribute * bus_attr = to_bus_attr(attr);
-	struct bus_type * bus = to_bus(kobj);
+	struct bus_type_private *bus_priv = to_bus(kobj);
 	ssize_t ret = 0;
 
 	if (bus_attr->store)
-		ret = bus_attr->store(bus, buf, count);
+		ret = bus_attr->store(bus_priv->bus, buf, count);
 	return ret;
 }
 
@@ -135,7 +139,7 @@ int bus_create_file(struct bus_type * bus, struct bus_attribute * attr)
 {
 	int error;
 	if (bus_get(bus)) {
-		error = sysfs_create_file(&bus->subsys.kobj, &attr->attr);
+		error = sysfs_create_file(&bus->p->subsys.kobj, &attr->attr);
 		bus_put(bus);
 	} else
 		error = -EINVAL;
@@ -145,7 +149,7 @@ int bus_create_file(struct bus_type * bus, struct bus_attribute * attr)
 void bus_remove_file(struct bus_type * bus, struct bus_attribute * attr)
 {
 	if (bus_get(bus)) {
-		sysfs_remove_file(&bus->subsys.kobj, &attr->attr);
+		sysfs_remove_file(&bus->p->subsys.kobj, &attr->attr);
 		bus_put(bus);
 	}
 }
@@ -238,16 +242,16 @@ static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind);
 
 static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf)
 {
-	return sprintf(buf, "%d\n", bus->drivers_autoprobe);
+	return sprintf(buf, "%d\n", bus->p->drivers_autoprobe);
 }
 
 static ssize_t store_drivers_autoprobe(struct bus_type *bus,
 				       const char *buf, size_t count)
 {
 	if (buf[0] == '0')
-		bus->drivers_autoprobe = 0;
+		bus->p->drivers_autoprobe = 0;
 	else
-		bus->drivers_autoprobe = 1;
+		bus->p->drivers_autoprobe = 1;
 	return count;
 }
 
@@ -301,7 +305,7 @@ int bus_for_each_dev(struct bus_type * bus, struct device * start,
 	if (!bus)
 		return -EINVAL;
 
-	klist_iter_init_node(&bus->klist_devices, &i,
+	klist_iter_init_node(&bus->p->klist_devices, &i,
 			     (start ? &start->knode_bus : NULL));
 	while ((dev = next_device(&i)) && !error)
 		error = fn(dev, data);
@@ -334,7 +338,7 @@ struct device * bus_find_device(struct bus_type *bus,
 	if (!bus)
 		return NULL;
 
-	klist_iter_init_node(&bus->klist_devices, &i,
+	klist_iter_init_node(&bus->p->klist_devices, &i,
 			     (start ? &start->knode_bus : NULL));
 	while ((dev = next_device(&i)))
 		if (match(dev, data) && get_device(dev))
@@ -380,7 +384,7 @@ int bus_for_each_drv(struct bus_type * bus, struct device_driver * start,
 	if (!bus)
 		return -EINVAL;
 
-	klist_iter_init_node(&bus->klist_drivers, &i,
+	klist_iter_init_node(&bus->p->klist_drivers, &i,
 			     start ? &start->knode_bus : NULL);
 	while ((drv = next_driver(&i)) && !error)
 		error = fn(drv, data);
@@ -450,12 +454,12 @@ int bus_add_device(struct device * dev)
 		error = device_add_attrs(bus, dev);
 		if (error)
 			goto out_put;
-		error = sysfs_create_link(&bus->devices_kset->kobj,
+		error = sysfs_create_link(&bus->p->devices_kset->kobj,
 						&dev->kobj, dev->bus_id);
 		if (error)
 			goto out_id;
 		error = sysfs_create_link(&dev->kobj,
-				&dev->bus->subsys.kobj, "subsystem");
+				&dev->bus->p->subsys.kobj, "subsystem");
 		if (error)
 			goto out_subsys;
 		error = make_deprecated_bus_links(dev);
@@ -467,7 +471,7 @@ int bus_add_device(struct device * dev)
 out_deprecated:
 	sysfs_remove_link(&dev->kobj, "subsystem");
 out_subsys:
-	sysfs_remove_link(&bus->devices_kset->kobj, dev->bus_id);
+	sysfs_remove_link(&bus->p->devices_kset->kobj, dev->bus_id);
 out_id:
 	device_remove_attrs(bus, dev);
 out_put:
@@ -489,11 +493,11 @@ void bus_attach_device(struct device * dev)
 
 	if (bus) {
 		dev->is_registered = 1;
-		if (bus->drivers_autoprobe)
+		if (bus->p->drivers_autoprobe)
 			ret = device_attach(dev);
 		WARN_ON(ret < 0);
 		if (ret >= 0)
-			klist_add_tail(&dev->knode_bus, &bus->klist_devices);
+			klist_add_tail(&dev->knode_bus, &bus->p->klist_devices);
 		else
 			dev->is_registered = 0;
 	}
@@ -513,7 +517,7 @@ void bus_remove_device(struct device * dev)
 	if (dev->bus) {
 		sysfs_remove_link(&dev->kobj, "subsystem");
 		remove_deprecated_bus_links(dev);
-		sysfs_remove_link(&dev->bus->devices_kset->kobj, dev->bus_id);
+		sysfs_remove_link(&dev->bus->p->devices_kset->kobj, dev->bus_id);
 		device_remove_attrs(dev->bus, dev);
 		if (dev->is_registered) {
 			dev->is_registered = 0;
@@ -639,18 +643,18 @@ int bus_add_driver(struct device_driver *drv)
 	error = kobject_set_name(&drv->kobj, "%s", drv->name);
 	if (error)
 		goto out_put_bus;
-	drv->kobj.kset = bus->drivers_kset;
+	drv->kobj.kset = bus->p->drivers_kset;
 	drv->kobj.ktype = &driver_ktype;
 	error = kobject_register(&drv->kobj);
 	if (error)
 		goto out_put_bus;
 
-	if (drv->bus->drivers_autoprobe) {
+	if (drv->bus->p->drivers_autoprobe) {
 		error = driver_attach(drv);
 		if (error)
 			goto out_unregister;
 	}
-	klist_add_tail(&drv->knode_bus, &bus->klist_drivers);
+	klist_add_tail(&drv->knode_bus, &bus->p->klist_drivers);
 	module_add_driver(drv->owner, drv);
 
 	error = driver_create_file(drv, &driver_attr_uevent);
@@ -829,7 +833,7 @@ static ssize_t bus_uevent_store(struct bus_type *bus,
 	enum kobject_action action;
 
 	if (kobject_action_type(buf, count, &action) == 0)
-		kobject_uevent(&bus->subsys.kobj, action);
+		kobject_uevent(&bus->p->subsys.kobj, action);
 	return count;
 }
 static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
@@ -845,17 +849,26 @@ static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
 int bus_register(struct bus_type * bus)
 {
 	int retval;
+	struct bus_type_private *priv;
+
+	priv = kzalloc(sizeof(struct bus_type_private), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->bus = bus;
+	bus->p = priv;
 
-	BLOCKING_INIT_NOTIFIER_HEAD(&bus->bus_notifier);
+	BLOCKING_INIT_NOTIFIER_HEAD(&priv->bus_notifier);
 
-	retval = kobject_set_name(&bus->subsys.kobj, "%s", bus->name);
+	retval = kobject_set_name(&priv->subsys.kobj, "%s", bus->name);
 	if (retval)
 		goto out;
 
-	bus->subsys.kobj.kset = bus_kset;
-	bus->subsys.kobj.ktype = &bus_ktype;
+	priv->subsys.kobj.kset = bus_kset;
+	priv->subsys.kobj.ktype = &bus_ktype;
+	priv->drivers_autoprobe = 1;
 
-	retval = subsystem_register(&bus->subsys);
+	retval = kset_register(&priv->subsys);
 	if (retval)
 		goto out;
 
@@ -863,24 +876,25 @@ int bus_register(struct bus_type * bus)
 	if (retval)
 		goto bus_uevent_fail;
 
-	bus->devices_kset = kset_create_and_register("devices", NULL,
-						     &bus->subsys.kobj, NULL);
-	if (IS_ERR(bus->devices_kset)) {
-		retval = PTR_ERR(bus->devices_kset);
+	priv->devices_kset = kset_create_and_register("devices", NULL,
+						      &priv->subsys.kobj,
+						      NULL);
+	if (IS_ERR(priv->devices_kset)) {
+		retval = PTR_ERR(priv->devices_kset);
 		goto bus_devices_fail;
 	}
 
-	bus->drivers_kset = kset_create_and_register("drivers", NULL,
-						     &bus->subsys.kobj, NULL);
-	if (IS_ERR(bus->drivers_kset)) {
-		retval = PTR_ERR(bus->drivers_kset);
+	priv->drivers_kset = kset_create_and_register("drivers", NULL,
+						      &priv->subsys.kobj,
+						      NULL);
+	if (IS_ERR(priv->drivers_kset)) {
+		retval = PTR_ERR(priv->drivers_kset);
 		goto bus_drivers_fail;
 	}
 
-	klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put);
-	klist_init(&bus->klist_drivers, NULL, NULL);
+	klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put);
+	klist_init(&priv->klist_drivers, NULL, NULL);
 
-	bus->drivers_autoprobe = 1;
 	retval = add_probe_files(bus);
 	if (retval)
 		goto bus_probe_files_fail;
@@ -895,13 +909,14 @@ int bus_register(struct bus_type * bus)
 bus_attrs_fail:
 	remove_probe_files(bus);
 bus_probe_files_fail:
-	kset_unregister(bus->drivers_kset);
+	kset_unregister(bus->p->drivers_kset);
 bus_drivers_fail:
-	kset_unregister(bus->devices_kset);
+	kset_unregister(bus->p->devices_kset);
 bus_devices_fail:
 	bus_remove_file(bus, &bus_attr_uevent);
 bus_uevent_fail:
-	subsystem_unregister(&bus->subsys);
+	kset_unregister(&bus->p->subsys);
+	kfree(bus->p);
 out:
 	return retval;
 }
@@ -918,33 +933,34 @@ void bus_unregister(struct bus_type * bus)
 	pr_debug("bus %s: unregistering\n", bus->name);
 	bus_remove_attrs(bus);
 	remove_probe_files(bus);
-	kset_unregister(bus->drivers_kset);
-	kset_unregister(bus->devices_kset);
+	kset_unregister(bus->p->drivers_kset);
+	kset_unregister(bus->p->devices_kset);
 	bus_remove_file(bus, &bus_attr_uevent);
-	subsystem_unregister(&bus->subsys);
+	kset_unregister(&bus->p->subsys);
+	kfree(bus->p);
 }
 
 int bus_register_notifier(struct bus_type *bus, struct notifier_block *nb)
 {
-	return blocking_notifier_chain_register(&bus->bus_notifier, nb);
+	return blocking_notifier_chain_register(&bus->p->bus_notifier, nb);
 }
 EXPORT_SYMBOL_GPL(bus_register_notifier);
 
 int bus_unregister_notifier(struct bus_type *bus, struct notifier_block *nb)
 {
-	return blocking_notifier_chain_unregister(&bus->bus_notifier, nb);
+	return blocking_notifier_chain_unregister(&bus->p->bus_notifier, nb);
 }
 EXPORT_SYMBOL_GPL(bus_unregister_notifier);
 
 struct kset *bus_get_kset(struct bus_type *bus)
 {
-	return &bus->subsys;
+	return &bus->p->subsys;
 }
 EXPORT_SYMBOL_GPL(bus_get_kset);
 
 struct klist *bus_get_device_klist(struct bus_type *bus)
 {
-	return &bus->klist_devices;
+	return &bus->p->klist_devices;
 }
 EXPORT_SYMBOL_GPL(bus_get_device_klist);
 
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 80188ec..d4753d4 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -749,7 +749,7 @@ int device_add(struct device *dev)
 
 	/* notify clients of device entry (new way) */
 	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->bus_notifier,
+		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 					     BUS_NOTIFY_ADD_DEVICE, dev);
 
 	error = device_create_file(dev, &uevent_attr);
@@ -797,7 +797,7 @@ int device_add(struct device *dev)
 	device_pm_remove(dev);
  PMError:
 	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->bus_notifier,
+		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 					     BUS_NOTIFY_DEL_DEVICE, dev);
 	device_remove_attrs(dev);
  AttrsError:
@@ -975,7 +975,7 @@ void device_del(struct device * dev)
 	if (platform_notify_remove)
 		platform_notify_remove(dev);
 	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->bus_notifier,
+		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 					     BUS_NOTIFY_DEL_DEVICE, dev);
 	device_pm_remove(dev);
 	kobject_uevent(&dev->kobj, KOBJ_REMOVE);
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 7ac474d..7bf0e67 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -38,7 +38,7 @@ static void driver_bound(struct device *dev)
 		 dev->bus_id, dev->driver->name);
 
 	if (dev->bus)
-		blocking_notifier_call_chain(&dev->bus->bus_notifier,
+		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 					     BUS_NOTIFY_BOUND_DRIVER, dev);
 
 	klist_add_tail(&dev->knode_driver, &dev->driver->klist_devices);
@@ -296,7 +296,7 @@ static void __device_release_driver(struct device * dev)
 		klist_remove(&dev->knode_driver);
 
 		if (dev->bus)
-			blocking_notifier_call_chain(&dev->bus->bus_notifier,
+			blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 						     BUS_NOTIFY_UNBIND_DRIVER,
 						     dev);
 
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 1c9770d..f94be40 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -185,7 +185,7 @@ void driver_unregister(struct device_driver * drv)
  */
 struct device_driver *driver_find(const char *name, struct bus_type *bus)
 {
-	struct kobject *k = kset_find_obj(bus->drivers_kset, name);
+	struct kobject *k = kset_find_obj(bus->p->drivers_kset, name);
 	if (k)
 		return to_drv(k);
 	return NULL;
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index fb56092..d56a05f 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -497,12 +497,12 @@ int __init_or_module platform_driver_probe(struct platform_driver *drv,
 	 * if the probe was successful, and make sure any forced probes of
 	 * new devices fail.
 	 */
-	spin_lock(&platform_bus_type.klist_drivers.k_lock);
+	spin_lock(&platform_bus_type.p->klist_drivers.k_lock);
 	drv->probe = NULL;
 	if (code == 0 && list_empty(&drv->driver.klist_devices.k_list))
 		retval = -ENODEV;
 	drv->driver.probe = platform_drv_probe_fail;
-	spin_unlock(&platform_bus_type.klist_drivers.k_lock);
+	spin_unlock(&platform_bus_type.p->klist_drivers.k_lock);
 
 	if (code != retval)
 		platform_driver_unregister(drv);
diff --git a/include/linux/device.h b/include/linux/device.h
index 6d56a34..3701269 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -35,6 +35,7 @@ struct device_driver;
 struct class;
 struct class_device;
 struct bus_type;
+struct bus_type_private;
 
 struct bus_attribute {
 	struct attribute	attr;
@@ -51,15 +52,6 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
 
 struct bus_type {
 	const char		* name;
-
-	struct kset		subsys;
-	struct kset		*drivers_kset;
-	struct kset		*devices_kset;
-	struct klist		klist_devices;
-	struct klist		klist_drivers;
-
-	struct blocking_notifier_head bus_notifier;
-
 	struct bus_attribute	* bus_attrs;
 	struct device_attribute	* dev_attrs;
 	struct driver_attribute	* drv_attrs;
@@ -75,7 +67,7 @@ struct bus_type {
 	int (*resume_early)(struct device * dev);
 	int (*resume)(struct device * dev);
 
-	unsigned int drivers_autoprobe:1;
+	struct bus_type_private *p;
 };
 
 extern int __must_check bus_register(struct bus_type * bus);
-- 
1.5.3.4


  parent reply	other threads:[~2007-11-03  0:11 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-02 23:57 [RFC] kobject and kset core changes and cleanups Greg KH
2007-11-02 23:58 ` [PATCH 01/54] ecryptfs: clean up attribute mess Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 02/54] KOBJECT: remove struct kobj_type from struct kset Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 03/54] KOBJECT: remove kobj_set_kset_s as no one is using it anymore Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 04/54] kset: add kset_create_and_register function Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 05/54] kset: convert fuse to use kset_create Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 06/54] kset: convert securityfs " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 07/54] kset: convert debugfs " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 08/54] kset: convert configfs " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 09/54] kset: convert ecryptfs " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 10/54] kset: convert main fs kset " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 11/54] kset: convert gfs2 " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 12/54] kset: convert gfs2 dlm " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 13/54] kset: convert " Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 14/54] kset: convert pci hotplug to use kset_create_and_register Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 15/54] kset: remove decl_subsys_name Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 16/54] kset: convert kernel_subsys to use kset_create Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 17/54] kset: convert drivers/base/bus.c kset_create_and_register Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 18/54] kset: convert drivers/base/class.c kset_create_and_register Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 19/54] kset: convert drivers/base/firmware.c kset_create_and_register Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 20/54] kset: convert /sys/devices to use kset_create Greg Kroah-Hartman
2007-11-02 23:58 ` [PATCH 21/54] kset: convert /sys/hypervisor " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 22/54] kset: convert /sys/devices/system " Greg Kroah-Hartman
2007-11-05 18:11   ` Cornelia Huck
2007-11-05 18:58     ` Greg KH
2007-11-05 19:11       ` Cornelia Huck
2007-11-05 20:03         ` Greg KH
2007-11-13 23:14           ` Andrew Morton
2007-11-14  0:01             ` Andrew Morton
2007-11-14  0:35               ` Greg KH
2007-11-14  7:35                 ` Andrew Morton
2007-11-02 23:59 ` [PATCH 23/54] kset: convert slub " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 24/54] kset: move /sys/slab to /sys/kernel/slab Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 25/54] kset: convert /sys/module to use kset_create Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 26/54] kset: convert /sys/power " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 27/54] kset: convert s390 hypervisor kset " Greg Kroah-Hartman
2007-11-05 13:18   ` Cornelia Huck
2007-11-05 17:06     ` Greg KH
2007-11-02 23:59 ` [PATCH 28/54] kset: convert struct bus_device->devices " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 29/54] kset: convert struct bus_device->drivers " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 30/54] driver core: remove owner field from struct bus_type Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 31/54] driver core: add way to get to bus kset Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 32/54] driver core: add way to get to bus device klist Greg Kroah-Hartman
2007-11-02 23:59 ` Greg Kroah-Hartman [this message]
2007-11-05 10:33   ` [PATCH 33/54] driver core: remove fields from struct bus_type Cornelia Huck
2007-11-05 17:00     ` Greg KH
2007-11-02 23:59 ` [PATCH 34/54] Driver Core: add kobj_attribute handling Greg Kroah-Hartman
2007-11-05 12:42   ` Cornelia Huck
2007-11-05 16:23     ` Kay Sievers
2007-11-05 17:11       ` Greg KH
2007-11-05 17:25         ` Kay Sievers
2007-11-05 17:43           ` Cornelia Huck
2007-11-05 18:07             ` Kay Sievers
2007-11-05 18:17               ` Cornelia Huck
2007-11-05 18:39                 ` Kay Sievers
2007-11-05 18:46                   ` Greg KH
2007-11-05 18:59                   ` Cornelia Huck
2007-11-05 20:01                     ` Greg KH
2007-11-02 23:59 ` [PATCH 35/54] Driver Core: switch all dynamic ksets to kobj_sysfs_ops Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 36/54] fix struct user_info export's sysfs interaction Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 37/54] ecryptfs: remove version_str file from sysfs Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 38/54] efivars: remove new_var and del_var files " Greg Kroah-Hartman
2007-11-16 15:01   ` Matt Domsch
2007-11-27  5:47     ` Greg KH
2007-11-02 23:59 ` [PATCH 39/54] kobject: convert efivars to kobj_attr interface Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 40/54] firmware: export firmware_kset so that people can use that instead of the braindead firmware_register interface Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 41/54] kset: convert efivars to use kset_create for the efi subsystem Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 42/54] kset: convert efivars to use kset_create for the vars sub-subsystem Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 43/54] kobject: convert arm/mach-omap1/pm.c to kobj_attr interface Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 44/54] kobject: convert pseries/power.c " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 45/54] kobject: convert s390 ipl.c " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 46/54] kset: convert s390 ipl.c to use kset_create Greg Kroah-Hartman
2007-11-05 10:27   ` Cornelia Huck
2007-11-05 17:05     ` Greg KH
2007-11-02 23:59 ` [PATCH 47/54] kobject: convert parisc/pdc_stable to kobj_attr interface Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 48/54] kset: convert parisc/pdc_stable.c to use kset_create Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 49/54] Driver Core: kill subsys_attribute and default sysfs ops Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 50/54] kset: convert edd to use kset_create Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 51/54] kset: convert acpi " Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 52/54] firmware: remove firmware_(un)register() Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 53/54] kset: convert ocfs2 to use kset_create Greg Kroah-Hartman
2007-11-02 23:59 ` [PATCH 54/54] kset: remove decl_subsys macro Greg Kroah-Hartman
2007-11-06  6:25 ` [RFC] kobject and kset core changes and cleanups Andrew Morton
2007-11-06  7:11 ` Andrew Morton
2007-11-06  8:14   ` Stephane Eranian
2007-11-06 21:15     ` Greg KH
2007-11-06 21:33       ` Stephane Eranian
2007-11-06  8:04 ` Andrew Morton

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=1194047972-9850-33-git-send-email-gregkh@suse.de \
    --to=gregkh@suse.de \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox