]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/base/core.c
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / drivers / base / core.c
index 18e2a89aa138945cf1154cfa1c1c2c71546a89b0..f6947d0abc2f470e56f6b4b72f894cacd050efd3 100644 (file)
@@ -533,6 +533,52 @@ static DEVICE_ATTR_RO(dev);
 /* /sys/devices/ */
 struct kset *devices_kset;
 
+/**
+ * devices_kset_move_before - Move device in the devices_kset's list.
+ * @deva: Device to move.
+ * @devb: Device @deva should come before.
+ */
+static void devices_kset_move_before(struct device *deva, struct device *devb)
+{
+       if (!devices_kset)
+               return;
+       pr_debug("devices_kset: Moving %s before %s\n",
+                dev_name(deva), dev_name(devb));
+       spin_lock(&devices_kset->list_lock);
+       list_move_tail(&deva->kobj.entry, &devb->kobj.entry);
+       spin_unlock(&devices_kset->list_lock);
+}
+
+/**
+ * devices_kset_move_after - Move device in the devices_kset's list.
+ * @deva: Device to move
+ * @devb: Device @deva should come after.
+ */
+static void devices_kset_move_after(struct device *deva, struct device *devb)
+{
+       if (!devices_kset)
+               return;
+       pr_debug("devices_kset: Moving %s after %s\n",
+                dev_name(deva), dev_name(devb));
+       spin_lock(&devices_kset->list_lock);
+       list_move(&deva->kobj.entry, &devb->kobj.entry);
+       spin_unlock(&devices_kset->list_lock);
+}
+
+/**
+ * devices_kset_move_last - move the device to the end of devices_kset's list.
+ * @dev: device to move
+ */
+void devices_kset_move_last(struct device *dev)
+{
+       if (!devices_kset)
+               return;
+       pr_debug("devices_kset: Moving %s to end of list\n", dev_name(dev));
+       spin_lock(&devices_kset->list_lock);
+       list_move_tail(&dev->kobj.entry, &devices_kset->list);
+       spin_unlock(&devices_kset->list_lock);
+}
+
 /**
  * device_create_file - create sysfs attribute file for device.
  * @dev: device.
@@ -1926,12 +1972,15 @@ int device_move(struct device *dev, struct device *new_parent,
                break;
        case DPM_ORDER_DEV_AFTER_PARENT:
                device_pm_move_after(dev, new_parent);
+               devices_kset_move_after(dev, new_parent);
                break;
        case DPM_ORDER_PARENT_BEFORE_DEV:
                device_pm_move_before(new_parent, dev);
+               devices_kset_move_before(new_parent, dev);
                break;
        case DPM_ORDER_DEV_LAST:
                device_pm_move_last(dev);
+               devices_kset_move_last(dev);
                break;
        }