Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 11 Jan 2011 00:10:33 +0000 (16:10 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 11 Jan 2011 00:10:33 +0000 (16:10 -0800)
* 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6:
  driver core: Document that device_rename() is only for networking
  sysfs: remove useless test from sysfs_merge_group
  driver-core: merge private parts of class and bus
  driver core: fix whitespace in class_attr_string

1  2 
drivers/base/core.c
include/linux/device.h

diff --combined drivers/base/core.c
@@@ -338,35 -338,6 +338,35 @@@ static void device_remove_attributes(st
                        device_remove_file(dev, &attrs[i]);
  }
  
 +static int device_add_bin_attributes(struct device *dev,
 +                                   struct bin_attribute *attrs)
 +{
 +      int error = 0;
 +      int i;
 +
 +      if (attrs) {
 +              for (i = 0; attr_name(attrs[i]); i++) {
 +                      error = device_create_bin_file(dev, &attrs[i]);
 +                      if (error)
 +                              break;
 +              }
 +              if (error)
 +                      while (--i >= 0)
 +                              device_remove_bin_file(dev, &attrs[i]);
 +      }
 +      return error;
 +}
 +
 +static void device_remove_bin_attributes(struct device *dev,
 +                                       struct bin_attribute *attrs)
 +{
 +      int i;
 +
 +      if (attrs)
 +              for (i = 0; attr_name(attrs[i]); i++)
 +                      device_remove_bin_file(dev, &attrs[i]);
 +}
 +
  static int device_add_groups(struct device *dev,
                             const struct attribute_group **groups)
  {
@@@ -407,15 -378,12 +407,15 @@@ static int device_add_attrs(struct devi
                error = device_add_attributes(dev, class->dev_attrs);
                if (error)
                        return error;
 +              error = device_add_bin_attributes(dev, class->dev_bin_attrs);
 +              if (error)
 +                      goto err_remove_class_attrs;
        }
  
        if (type) {
                error = device_add_groups(dev, type->groups);
                if (error)
 -                      goto err_remove_class_attrs;
 +                      goto err_remove_class_bin_attrs;
        }
  
        error = device_add_groups(dev, dev->groups);
   err_remove_type_groups:
        if (type)
                device_remove_groups(dev, type->groups);
 + err_remove_class_bin_attrs:
 +      if (class)
 +              device_remove_bin_attributes(dev, class->dev_bin_attrs);
   err_remove_class_attrs:
        if (class)
                device_remove_attributes(dev, class->dev_attrs);
@@@ -447,10 -412,8 +447,10 @@@ static void device_remove_attrs(struct 
        if (type)
                device_remove_groups(dev, type->groups);
  
 -      if (class)
 +      if (class) {
                device_remove_attributes(dev, class->dev_attrs);
 +              device_remove_bin_attributes(dev, class->dev_bin_attrs);
 +      }
  }
  
  
@@@ -647,7 -610,7 +647,7 @@@ class_dir_create_and_add(struct class *
        dir->class = class;
        kobject_init(&dir->kobj, &class_dir_ktype);
  
-       dir->kobj.kset = &class->p->class_dirs;
+       dir->kobj.kset = &class->p->glue_dirs;
  
        retval = kobject_add(&dir->kobj, parent_kobj, "%s", class->name);
        if (retval < 0) {
@@@ -672,7 -635,7 +672,7 @@@ static struct kobject *get_device_paren
                if (sysfs_deprecated && dev->class == &block_class) {
                        if (parent && parent->class == &block_class)
                                return &parent->kobj;
-                       return &block_class.p->class_subsys.kobj;
+                       return &block_class.p->subsys.kobj;
                }
  #endif
  
                mutex_lock(&gdp_mutex);
  
                /* find our class-directory at the parent and reference it */
-               spin_lock(&dev->class->p->class_dirs.list_lock);
-               list_for_each_entry(k, &dev->class->p->class_dirs.list, entry)
+               spin_lock(&dev->class->p->glue_dirs.list_lock);
+               list_for_each_entry(k, &dev->class->p->glue_dirs.list, entry)
                        if (k->parent == parent_kobj) {
                                kobj = kobject_get(k);
                                break;
                        }
-               spin_unlock(&dev->class->p->class_dirs.list_lock);
+               spin_unlock(&dev->class->p->glue_dirs.list_lock);
                if (kobj) {
                        mutex_unlock(&gdp_mutex);
                        return kobj;
@@@ -719,7 -682,7 +719,7 @@@ static void cleanup_glue_dir(struct dev
  {
        /* see if we live in a "glue" directory */
        if (!glue_dir || !dev->class ||
-           glue_dir->kset != &dev->class->p->class_dirs)
+           glue_dir->kset != &dev->class->p->glue_dirs)
                return;
  
        kobject_put(glue_dir);
@@@ -746,7 -709,7 +746,7 @@@ static int device_add_class_symlinks(st
                return 0;
  
        error = sysfs_create_link(&dev->kobj,
-                                 &dev->class->p->class_subsys.kobj,
+                                 &dev->class->p->subsys.kobj,
                                  "subsystem");
        if (error)
                goto out;
  #endif
  
        /* link in the class directory pointing to the device */
-       error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
+       error = sysfs_create_link(&dev->class->p->subsys.kobj,
                                  &dev->kobj, dev_name(dev));
        if (error)
                goto out_device;
@@@ -793,7 -756,7 +793,7 @@@ static void device_remove_class_symlink
        if (sysfs_deprecated && dev->class == &block_class)
                return;
  #endif
-       sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));
+       sysfs_delete_link(&dev->class->p->subsys.kobj, &dev->kobj, dev_name(dev));
  }
  
  /**
@@@ -984,7 -947,7 +984,7 @@@ int device_add(struct device *dev
                mutex_lock(&dev->class->p->class_mutex);
                /* tie the class to the device */
                klist_add_tail(&dev->knode_class,
-                              &dev->class->p->class_devices);
+                              &dev->class->p->klist_devices);
  
                /* notify any interfaces that the device is here */
                list_for_each_entry(class_intf,
@@@ -1550,6 -1513,8 +1550,8 @@@ EXPORT_SYMBOL_GPL(device_destroy)
   * exclusion between two different calls of device_rename
   * on the same device to ensure that new_name is valid and
   * won't conflict with other devices.
+  *
+  * "Never use this function, bad things will happen" - gregkh
   */
  int device_rename(struct device *dev, const char *new_name)
  {
        }
  
        if (dev->class) {
-               error = sysfs_rename_link(&dev->class->p->class_subsys.kobj,
+               error = sysfs_rename_link(&dev->class->p->subsys.kobj,
                        &dev->kobj, old_device_name, new_name);
                if (error)
                        goto out;
diff --combined include/linux/device.h
@@@ -30,9 -30,8 +30,8 @@@ struct device_private
  struct device_driver;
  struct driver_private;
  struct class;
- struct class_private;
+ struct subsys_private;
  struct bus_type;
- struct bus_type_private;
  struct device_node;
  
  struct bus_attribute {
@@@ -65,7 -64,7 +64,7 @@@ struct bus_type 
  
        const struct dev_pm_ops *pm;
  
-       struct bus_type_private *p;
+       struct subsys_private *p;
  };
  
  extern int __must_check bus_register(struct bus_type *bus);
@@@ -197,7 -196,6 +196,7 @@@ struct class 
  
        struct class_attribute          *class_attrs;
        struct device_attribute         *dev_attrs;
 +      struct bin_attribute            *dev_bin_attrs;
        struct kobject                  *dev_kobj;
  
        int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
  
        const struct dev_pm_ops *pm;
  
-       struct class_private *p;
+       struct subsys_private *p;
  };
  
  struct class_dev_iter {
@@@ -509,13 -507,13 +508,13 @@@ static inline int device_is_registered(
  
  static inline void device_enable_async_suspend(struct device *dev)
  {
 -      if (dev->power.status == DPM_ON)
 +      if (!dev->power.in_suspend)
                dev->power.async_suspend = true;
  }
  
  static inline void device_disable_async_suspend(struct device *dev)
  {
 -      if (dev->power.status == DPM_ON)
 +      if (!dev->power.in_suspend)
                dev->power.async_suspend = false;
  }