mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6: remove "struct subsystem" as it is no longer needed sysfs: printk format warning DOC: Fix wrong identifier name in Documentation/driver-model/devres.txt platform: reorder platform_device_del Driver core: fix show_uevent from taking up way too much stack
This commit is contained in:
commit
5b33991576
49 changed files with 244 additions and 298 deletions
|
|
@ -45,3 +45,5 @@ struct class_device_attribute *to_class_dev_attr(struct attribute *_attr)
|
|||
extern char *make_class_name(const char *name, struct kobject *kobj);
|
||||
|
||||
extern void devres_release_all(struct device *dev);
|
||||
|
||||
extern struct kset devices_subsys;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,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.kset.kobj)
|
||||
#define to_bus(obj) container_of(obj, struct bus_type, subsys.kobj)
|
||||
|
||||
/*
|
||||
* sysfs bindings for drivers
|
||||
|
|
@ -123,7 +123,7 @@ int bus_create_file(struct bus_type * bus, struct bus_attribute * attr)
|
|||
{
|
||||
int error;
|
||||
if (get_bus(bus)) {
|
||||
error = sysfs_create_file(&bus->subsys.kset.kobj, &attr->attr);
|
||||
error = sysfs_create_file(&bus->subsys.kobj, &attr->attr);
|
||||
put_bus(bus);
|
||||
} else
|
||||
error = -EINVAL;
|
||||
|
|
@ -133,7 +133,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 (get_bus(bus)) {
|
||||
sysfs_remove_file(&bus->subsys.kset.kobj, &attr->attr);
|
||||
sysfs_remove_file(&bus->subsys.kobj, &attr->attr);
|
||||
put_bus(bus);
|
||||
}
|
||||
}
|
||||
|
|
@ -397,7 +397,7 @@ static void device_remove_attrs(struct bus_type * bus, struct device * dev)
|
|||
static int make_deprecated_bus_links(struct device *dev)
|
||||
{
|
||||
return sysfs_create_link(&dev->kobj,
|
||||
&dev->bus->subsys.kset.kobj, "bus");
|
||||
&dev->bus->subsys.kobj, "bus");
|
||||
}
|
||||
|
||||
static void remove_deprecated_bus_links(struct device *dev)
|
||||
|
|
@ -431,7 +431,7 @@ int bus_add_device(struct device * dev)
|
|||
if (error)
|
||||
goto out_id;
|
||||
error = sysfs_create_link(&dev->kobj,
|
||||
&dev->bus->subsys.kset.kobj, "subsystem");
|
||||
&dev->bus->subsys.kobj, "subsystem");
|
||||
if (error)
|
||||
goto out_subsys;
|
||||
error = make_deprecated_bus_links(dev);
|
||||
|
|
@ -810,7 +810,7 @@ int bus_register(struct bus_type * bus)
|
|||
|
||||
BLOCKING_INIT_NOTIFIER_HEAD(&bus->bus_notifier);
|
||||
|
||||
retval = kobject_set_name(&bus->subsys.kset.kobj, "%s", bus->name);
|
||||
retval = kobject_set_name(&bus->subsys.kobj, "%s", bus->name);
|
||||
if (retval)
|
||||
goto out;
|
||||
|
||||
|
|
@ -820,13 +820,13 @@ int bus_register(struct bus_type * bus)
|
|||
goto out;
|
||||
|
||||
kobject_set_name(&bus->devices.kobj, "devices");
|
||||
bus->devices.subsys = &bus->subsys;
|
||||
bus->devices.kobj.parent = &bus->subsys.kobj;
|
||||
retval = kset_register(&bus->devices);
|
||||
if (retval)
|
||||
goto bus_devices_fail;
|
||||
|
||||
kobject_set_name(&bus->drivers.kobj, "drivers");
|
||||
bus->drivers.subsys = &bus->subsys;
|
||||
bus->drivers.kobj.parent = &bus->subsys.kobj;
|
||||
bus->drivers.ktype = &ktype_driver;
|
||||
retval = kset_register(&bus->drivers);
|
||||
if (retval)
|
||||
|
|
|
|||
|
|
@ -19,10 +19,8 @@
|
|||
#include <linux/slab.h>
|
||||
#include "base.h"
|
||||
|
||||
extern struct subsystem devices_subsys;
|
||||
|
||||
#define to_class_attr(_attr) container_of(_attr, struct class_attribute, attr)
|
||||
#define to_class(obj) container_of(obj, struct class, subsys.kset.kobj)
|
||||
#define to_class(obj) container_of(obj, struct class, subsys.kobj)
|
||||
|
||||
static ssize_t
|
||||
class_attr_show(struct kobject * kobj, struct attribute * attr, char * buf)
|
||||
|
|
@ -80,7 +78,7 @@ int class_create_file(struct class * cls, const struct class_attribute * attr)
|
|||
{
|
||||
int error;
|
||||
if (cls) {
|
||||
error = sysfs_create_file(&cls->subsys.kset.kobj, &attr->attr);
|
||||
error = sysfs_create_file(&cls->subsys.kobj, &attr->attr);
|
||||
} else
|
||||
error = -EINVAL;
|
||||
return error;
|
||||
|
|
@ -89,7 +87,7 @@ int class_create_file(struct class * cls, const struct class_attribute * attr)
|
|||
void class_remove_file(struct class * cls, const struct class_attribute * attr)
|
||||
{
|
||||
if (cls)
|
||||
sysfs_remove_file(&cls->subsys.kset.kobj, &attr->attr);
|
||||
sysfs_remove_file(&cls->subsys.kobj, &attr->attr);
|
||||
}
|
||||
|
||||
static struct class *class_get(struct class *cls)
|
||||
|
|
@ -147,7 +145,7 @@ int class_register(struct class * cls)
|
|||
INIT_LIST_HEAD(&cls->interfaces);
|
||||
kset_init(&cls->class_dirs);
|
||||
init_MUTEX(&cls->sem);
|
||||
error = kobject_set_name(&cls->subsys.kset.kobj, "%s", cls->name);
|
||||
error = kobject_set_name(&cls->subsys.kobj, "%s", cls->name);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
|
@ -611,7 +609,7 @@ int class_device_add(struct class_device *class_dev)
|
|||
if (parent_class_dev)
|
||||
class_dev->kobj.parent = &parent_class_dev->kobj;
|
||||
else
|
||||
class_dev->kobj.parent = &parent_class->subsys.kset.kobj;
|
||||
class_dev->kobj.parent = &parent_class->subsys.kobj;
|
||||
|
||||
error = kobject_add(&class_dev->kobj);
|
||||
if (error)
|
||||
|
|
@ -619,7 +617,7 @@ int class_device_add(struct class_device *class_dev)
|
|||
|
||||
/* add the needed attributes to this device */
|
||||
error = sysfs_create_link(&class_dev->kobj,
|
||||
&parent_class->subsys.kset.kobj, "subsystem");
|
||||
&parent_class->subsys.kobj, "subsystem");
|
||||
if (error)
|
||||
goto out3;
|
||||
class_dev->uevent_attr.attr.name = "uevent";
|
||||
|
|
@ -917,8 +915,8 @@ int __init classes_init(void)
|
|||
/* ick, this is ugly, the things we go through to keep from showing up
|
||||
* in sysfs... */
|
||||
subsystem_init(&class_obj_subsys);
|
||||
if (!class_obj_subsys.kset.subsys)
|
||||
class_obj_subsys.kset.subsys = &class_obj_subsys;
|
||||
if (!class_obj_subsys.kobj.parent)
|
||||
class_obj_subsys.kobj.parent = &class_obj_subsys.kobj;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
|
|||
struct kobject *top_kobj;
|
||||
struct kset *kset;
|
||||
char *envp[32];
|
||||
char data[PAGE_SIZE];
|
||||
char *data = NULL;
|
||||
char *pos;
|
||||
int i;
|
||||
size_t count = 0;
|
||||
|
|
@ -276,6 +276,10 @@ static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
|
|||
if (!kset->uevent_ops->filter(kset, &dev->kobj))
|
||||
goto out;
|
||||
|
||||
data = (char *)get_zeroed_page(GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
/* let the kset specific function add its keys */
|
||||
pos = data;
|
||||
retval = kset->uevent_ops->uevent(kset, &dev->kobj,
|
||||
|
|
@ -290,6 +294,7 @@ static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
|
|||
count += sprintf(pos, "%s\n", envp[i]);
|
||||
}
|
||||
out:
|
||||
free_page((unsigned long)data);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
@ -560,7 +565,7 @@ static struct kobject * get_device_parent(struct device *dev,
|
|||
/* Set the parent to the class, not the parent device */
|
||||
/* this keeps sysfs from having a symlink to make old udevs happy */
|
||||
if (dev->class)
|
||||
return &dev->class->subsys.kset.kobj;
|
||||
return &dev->class->subsys.kobj;
|
||||
else if (parent)
|
||||
return &parent->kobj;
|
||||
|
||||
|
|
@ -572,7 +577,7 @@ static struct kobject *virtual_device_parent(struct device *dev)
|
|||
static struct kobject *virtual_dir = NULL;
|
||||
|
||||
if (!virtual_dir)
|
||||
virtual_dir = kobject_add_dir(&devices_subsys.kset.kobj, "virtual");
|
||||
virtual_dir = kobject_add_dir(&devices_subsys.kobj, "virtual");
|
||||
|
||||
return virtual_dir;
|
||||
}
|
||||
|
|
@ -706,12 +711,12 @@ int device_add(struct device *dev)
|
|||
}
|
||||
|
||||
if (dev->class) {
|
||||
sysfs_create_link(&dev->kobj, &dev->class->subsys.kset.kobj,
|
||||
sysfs_create_link(&dev->kobj, &dev->class->subsys.kobj,
|
||||
"subsystem");
|
||||
/* If this is not a "fake" compatible device, then create the
|
||||
* symlink from the class to the device. */
|
||||
if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
|
||||
sysfs_create_link(&dev->class->subsys.kset.kobj,
|
||||
if (dev->kobj.parent != &dev->class->subsys.kobj)
|
||||
sysfs_create_link(&dev->class->subsys.kobj,
|
||||
&dev->kobj, dev->bus_id);
|
||||
if (parent) {
|
||||
sysfs_create_link(&dev->kobj, &dev->parent->kobj,
|
||||
|
|
@ -769,8 +774,8 @@ int device_add(struct device *dev)
|
|||
sysfs_remove_link(&dev->kobj, "subsystem");
|
||||
/* If this is not a "fake" compatible device, remove the
|
||||
* symlink from the class to the device. */
|
||||
if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
|
||||
sysfs_remove_link(&dev->class->subsys.kset.kobj,
|
||||
if (dev->kobj.parent != &dev->class->subsys.kobj)
|
||||
sysfs_remove_link(&dev->class->subsys.kobj,
|
||||
dev->bus_id);
|
||||
if (parent) {
|
||||
#ifdef CONFIG_SYSFS_DEPRECATED
|
||||
|
|
@ -870,8 +875,8 @@ void device_del(struct device * dev)
|
|||
sysfs_remove_link(&dev->kobj, "subsystem");
|
||||
/* If this is not a "fake" compatible device, remove the
|
||||
* symlink from the class to the device. */
|
||||
if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
|
||||
sysfs_remove_link(&dev->class->subsys.kset.kobj,
|
||||
if (dev->kobj.parent != &dev->class->subsys.kobj)
|
||||
sysfs_remove_link(&dev->class->subsys.kobj,
|
||||
dev->bus_id);
|
||||
if (parent) {
|
||||
#ifdef CONFIG_SYSFS_DEPRECATED
|
||||
|
|
@ -1187,9 +1192,9 @@ int device_rename(struct device *dev, char *new_name)
|
|||
#endif
|
||||
|
||||
if (dev->class) {
|
||||
sysfs_remove_link(&dev->class->subsys.kset.kobj,
|
||||
sysfs_remove_link(&dev->class->subsys.kobj,
|
||||
old_symlink_name);
|
||||
sysfs_create_link(&dev->class->subsys.kset.kobj, &dev->kobj,
|
||||
sysfs_create_link(&dev->class->subsys.kobj, &dev->kobj,
|
||||
dev->bus_id);
|
||||
}
|
||||
put_device(dev);
|
||||
|
|
|
|||
|
|
@ -17,13 +17,13 @@
|
|||
|
||||
static decl_subsys(firmware, NULL, NULL);
|
||||
|
||||
int firmware_register(struct subsystem * s)
|
||||
int firmware_register(struct kset *s)
|
||||
{
|
||||
kset_set_kset_s(s, firmware_subsys);
|
||||
kobj_set_kset_s(s, firmware_subsys);
|
||||
return subsystem_register(s);
|
||||
}
|
||||
|
||||
void firmware_unregister(struct subsystem * s)
|
||||
void firmware_unregister(struct kset *s)
|
||||
{
|
||||
subsystem_unregister(s);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,20 +292,22 @@ EXPORT_SYMBOL_GPL(platform_device_add);
|
|||
* @pdev: platform device we're removing
|
||||
*
|
||||
* Note that this function will also release all memory- and port-based
|
||||
* resources owned by the device (@dev->resource).
|
||||
* resources owned by the device (@dev->resource). This function
|
||||
* must _only_ be externally called in error cases. All other usage
|
||||
* is a bug.
|
||||
*/
|
||||
void platform_device_del(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (pdev) {
|
||||
device_del(&pdev->dev);
|
||||
|
||||
for (i = 0; i < pdev->num_resources; i++) {
|
||||
struct resource *r = &pdev->resource[i];
|
||||
if (r->flags & (IORESOURCE_MEM|IORESOURCE_IO))
|
||||
release_resource(r);
|
||||
}
|
||||
|
||||
device_del(&pdev->dev);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_device_del);
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
#define to_dev(node) container_of(node, struct device, kobj.entry)
|
||||
|
||||
extern struct subsystem devices_subsys;
|
||||
|
||||
|
||||
/**
|
||||
* We handle system devices differently - we suspend and shut them
|
||||
|
|
@ -36,7 +34,7 @@ void device_shutdown(void)
|
|||
{
|
||||
struct device * dev, *devn;
|
||||
|
||||
list_for_each_entry_safe_reverse(dev, devn, &devices_subsys.kset.list,
|
||||
list_for_each_entry_safe_reverse(dev, devn, &devices_subsys.list,
|
||||
kobj.entry) {
|
||||
if (dev->bus && dev->bus->shutdown) {
|
||||
dev_dbg(dev, "shutdown\n");
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "base.h"
|
||||
|
||||
extern struct subsystem devices_subsys;
|
||||
extern struct kset devices_subsys;
|
||||
|
||||
#define to_sysdev(k) container_of(k, struct sys_device, kobj)
|
||||
#define to_sysdev_attr(a) container_of(a, struct sysdev_attribute, attr)
|
||||
|
|
@ -138,7 +138,7 @@ int sysdev_class_register(struct sysdev_class * cls)
|
|||
pr_debug("Registering sysdev class '%s'\n",
|
||||
kobject_name(&cls->kset.kobj));
|
||||
INIT_LIST_HEAD(&cls->drivers);
|
||||
cls->kset.subsys = &system_subsys;
|
||||
cls->kset.kobj.parent = &system_subsys.kobj;
|
||||
kset_set_kset_s(cls, system_subsys);
|
||||
return kset_register(&cls->kset);
|
||||
}
|
||||
|
|
@ -309,7 +309,7 @@ void sysdev_shutdown(void)
|
|||
pr_debug("Shutting Down System Devices\n");
|
||||
|
||||
down(&sysdev_drivers_lock);
|
||||
list_for_each_entry_reverse(cls, &system_subsys.kset.list,
|
||||
list_for_each_entry_reverse(cls, &system_subsys.list,
|
||||
kset.kobj.entry) {
|
||||
struct sys_device * sysdev;
|
||||
|
||||
|
|
@ -384,7 +384,7 @@ int sysdev_suspend(pm_message_t state)
|
|||
|
||||
pr_debug("Suspending System Devices\n");
|
||||
|
||||
list_for_each_entry_reverse(cls, &system_subsys.kset.list,
|
||||
list_for_each_entry_reverse(cls, &system_subsys.list,
|
||||
kset.kobj.entry) {
|
||||
|
||||
pr_debug("Suspending type '%s':\n",
|
||||
|
|
@ -457,7 +457,7 @@ gbl_driver:
|
|||
}
|
||||
|
||||
/* resume other classes */
|
||||
list_for_each_entry_continue(cls, &system_subsys.kset.list,
|
||||
list_for_each_entry_continue(cls, &system_subsys.list,
|
||||
kset.kobj.entry) {
|
||||
list_for_each_entry(err_dev, &cls->kset.list, kobj.entry) {
|
||||
pr_debug(" %s\n", kobject_name(&err_dev->kobj));
|
||||
|
|
@ -483,7 +483,7 @@ int sysdev_resume(void)
|
|||
|
||||
pr_debug("Resuming System Devices\n");
|
||||
|
||||
list_for_each_entry(cls, &system_subsys.kset.list, kset.kobj.entry) {
|
||||
list_for_each_entry(cls, &system_subsys.list, kset.kobj.entry) {
|
||||
struct sys_device * sysdev;
|
||||
|
||||
pr_debug("Resuming type '%s':\n",
|
||||
|
|
@ -501,7 +501,7 @@ int sysdev_resume(void)
|
|||
|
||||
int __init system_bus_init(void)
|
||||
{
|
||||
system_subsys.kset.kobj.parent = &devices_subsys.kset.kobj;
|
||||
system_subsys.kobj.parent = &devices_subsys.kobj;
|
||||
return subsystem_register(&system_subsys);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue