LCOV - code coverage report
Current view: top level - drivers/base - bus.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 218 526 41.4 %
Date: 2021-04-22 12:43:58 Functions: 21 52 40.4 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : /*
       3             :  * bus.c - bus driver management
       4             :  *
       5             :  * Copyright (c) 2002-3 Patrick Mochel
       6             :  * Copyright (c) 2002-3 Open Source Development Labs
       7             :  * Copyright (c) 2007 Greg Kroah-Hartman <gregkh@suse.de>
       8             :  * Copyright (c) 2007 Novell Inc.
       9             :  */
      10             : 
      11             : #include <linux/async.h>
      12             : #include <linux/device/bus.h>
      13             : #include <linux/device.h>
      14             : #include <linux/module.h>
      15             : #include <linux/errno.h>
      16             : #include <linux/slab.h>
      17             : #include <linux/init.h>
      18             : #include <linux/string.h>
      19             : #include <linux/mutex.h>
      20             : #include <linux/sysfs.h>
      21             : #include "base.h"
      22             : #include "power/power.h"
      23             : 
      24             : /* /sys/devices/system */
      25             : static struct kset *system_kset;
      26             : 
      27             : #define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr)
      28             : 
      29             : /*
      30             :  * sysfs bindings for drivers
      31             :  */
      32             : 
      33             : #define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr)
      34             : 
      35             : #define DRIVER_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
      36             :         struct driver_attribute driver_attr_##_name =           \
      37             :                 __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
      38             : 
      39             : static int __must_check bus_rescan_devices_helper(struct device *dev,
      40             :                                                 void *data);
      41             : 
      42         220 : static struct bus_type *bus_get(struct bus_type *bus)
      43             : {
      44         220 :         if (bus) {
      45          69 :                 kset_get(&bus->p->subsys);
      46           0 :                 return bus;
      47             :         }
      48             :         return NULL;
      49             : }
      50             : 
      51          31 : static void bus_put(struct bus_type *bus)
      52             : {
      53          31 :         if (bus)
      54           1 :                 kset_put(&bus->p->subsys);
      55          30 : }
      56             : 
      57           0 : static ssize_t drv_attr_show(struct kobject *kobj, struct attribute *attr,
      58             :                              char *buf)
      59             : {
      60           0 :         struct driver_attribute *drv_attr = to_drv_attr(attr);
      61           0 :         struct driver_private *drv_priv = to_driver(kobj);
      62           0 :         ssize_t ret = -EIO;
      63             : 
      64           0 :         if (drv_attr->show)
      65           0 :                 ret = drv_attr->show(drv_priv->driver, buf);
      66           0 :         return ret;
      67             : }
      68             : 
      69          14 : static ssize_t drv_attr_store(struct kobject *kobj, struct attribute *attr,
      70             :                               const char *buf, size_t count)
      71             : {
      72          14 :         struct driver_attribute *drv_attr = to_drv_attr(attr);
      73          14 :         struct driver_private *drv_priv = to_driver(kobj);
      74          14 :         ssize_t ret = -EIO;
      75             : 
      76          14 :         if (drv_attr->store)
      77          14 :                 ret = drv_attr->store(drv_priv->driver, buf, count);
      78          14 :         return ret;
      79             : }
      80             : 
      81             : static const struct sysfs_ops driver_sysfs_ops = {
      82             :         .show   = drv_attr_show,
      83             :         .store  = drv_attr_store,
      84             : };
      85             : 
      86           1 : static void driver_release(struct kobject *kobj)
      87             : {
      88           1 :         struct driver_private *drv_priv = to_driver(kobj);
      89             : 
      90           1 :         pr_debug("driver: '%s': %s\n", kobject_name(kobj), __func__);
      91           1 :         kfree(drv_priv);
      92           1 : }
      93             : 
      94             : static struct kobj_type driver_ktype = {
      95             :         .sysfs_ops      = &driver_sysfs_ops,
      96             :         .release        = driver_release,
      97             : };
      98             : 
      99             : /*
     100             :  * sysfs bindings for buses
     101             :  */
     102           0 : static ssize_t bus_attr_show(struct kobject *kobj, struct attribute *attr,
     103             :                              char *buf)
     104             : {
     105           0 :         struct bus_attribute *bus_attr = to_bus_attr(attr);
     106           0 :         struct subsys_private *subsys_priv = to_subsys_private(kobj);
     107           0 :         ssize_t ret = 0;
     108             : 
     109           0 :         if (bus_attr->show)
     110           0 :                 ret = bus_attr->show(subsys_priv->bus, buf);
     111           0 :         return ret;
     112             : }
     113             : 
     114          10 : static ssize_t bus_attr_store(struct kobject *kobj, struct attribute *attr,
     115             :                               const char *buf, size_t count)
     116             : {
     117          10 :         struct bus_attribute *bus_attr = to_bus_attr(attr);
     118          10 :         struct subsys_private *subsys_priv = to_subsys_private(kobj);
     119          10 :         ssize_t ret = 0;
     120             : 
     121          10 :         if (bus_attr->store)
     122          10 :                 ret = bus_attr->store(subsys_priv->bus, buf, count);
     123          10 :         return ret;
     124             : }
     125             : 
     126             : static const struct sysfs_ops bus_sysfs_ops = {
     127             :         .show   = bus_attr_show,
     128             :         .store  = bus_attr_store,
     129             : };
     130             : 
     131          30 : int bus_create_file(struct bus_type *bus, struct bus_attribute *attr)
     132             : {
     133          30 :         int error;
     134          30 :         if (bus_get(bus)) {
     135          30 :                 error = sysfs_create_file(&bus->p->subsys.kobj, &attr->attr);
     136          30 :                 bus_put(bus);
     137             :         } else
     138             :                 error = -EINVAL;
     139          30 :         return error;
     140             : }
     141             : EXPORT_SYMBOL_GPL(bus_create_file);
     142             : 
     143           0 : void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr)
     144             : {
     145           0 :         if (bus_get(bus)) {
     146           0 :                 sysfs_remove_file(&bus->p->subsys.kobj, &attr->attr);
     147           0 :                 bus_put(bus);
     148             :         }
     149           0 : }
     150             : EXPORT_SYMBOL_GPL(bus_remove_file);
     151             : 
     152           0 : static void bus_release(struct kobject *kobj)
     153             : {
     154           0 :         struct subsys_private *priv = to_subsys_private(kobj);
     155           0 :         struct bus_type *bus = priv->bus;
     156             : 
     157           0 :         kfree(priv);
     158           0 :         bus->p = NULL;
     159           0 : }
     160             : 
     161             : static struct kobj_type bus_ktype = {
     162             :         .sysfs_ops      = &bus_sysfs_ops,
     163             :         .release        = bus_release,
     164             : };
     165             : 
     166          40 : static int bus_uevent_filter(struct kset *kset, struct kobject *kobj)
     167             : {
     168          40 :         struct kobj_type *ktype = get_ktype(kobj);
     169             : 
     170          40 :         if (ktype == &bus_ktype)
     171          20 :                 return 1;
     172             :         return 0;
     173             : }
     174             : 
     175             : static const struct kset_uevent_ops bus_uevent_ops = {
     176             :         .filter = bus_uevent_filter,
     177             : };
     178             : 
     179             : static struct kset *bus_kset;
     180             : 
     181             : /* Manually detach a device from its associated driver. */
     182           0 : static ssize_t unbind_store(struct device_driver *drv, const char *buf,
     183             :                             size_t count)
     184             : {
     185           0 :         struct bus_type *bus = bus_get(drv->bus);
     186           0 :         struct device *dev;
     187           0 :         int err = -ENODEV;
     188             : 
     189           0 :         dev = bus_find_device_by_name(bus, NULL, buf);
     190           0 :         if (dev && dev->driver == drv) {
     191           0 :                 device_driver_detach(dev);
     192           0 :                 err = count;
     193             :         }
     194           0 :         put_device(dev);
     195           0 :         bus_put(bus);
     196           0 :         return err;
     197             : }
     198             : static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, S_IWUSR, NULL, unbind_store);
     199             : 
     200             : /*
     201             :  * Manually attach a device to a driver.
     202             :  * Note: the driver must want to bind to the device,
     203             :  * it is not possible to override the driver's id table.
     204             :  */
     205           0 : static ssize_t bind_store(struct device_driver *drv, const char *buf,
     206             :                           size_t count)
     207             : {
     208           0 :         struct bus_type *bus = bus_get(drv->bus);
     209           0 :         struct device *dev;
     210           0 :         int err = -ENODEV;
     211             : 
     212           0 :         dev = bus_find_device_by_name(bus, NULL, buf);
     213           0 :         if (dev && dev->driver == NULL && driver_match_device(drv, dev)) {
     214           0 :                 err = device_driver_attach(drv, dev);
     215             : 
     216           0 :                 if (err > 0) {
     217             :                         /* success */
     218           0 :                         err = count;
     219           0 :                 } else if (err == 0) {
     220             :                         /* driver didn't accept device */
     221           0 :                         err = -ENODEV;
     222             :                 }
     223             :         }
     224           0 :         put_device(dev);
     225           0 :         bus_put(bus);
     226           0 :         return err;
     227             : }
     228             : static DRIVER_ATTR_IGNORE_LOCKDEP(bind, S_IWUSR, NULL, bind_store);
     229             : 
     230           0 : static ssize_t drivers_autoprobe_show(struct bus_type *bus, char *buf)
     231             : {
     232           0 :         return sysfs_emit(buf, "%d\n", bus->p->drivers_autoprobe);
     233             : }
     234             : 
     235           0 : static ssize_t drivers_autoprobe_store(struct bus_type *bus,
     236             :                                        const char *buf, size_t count)
     237             : {
     238           0 :         if (buf[0] == '0')
     239           0 :                 bus->p->drivers_autoprobe = 0;
     240             :         else
     241           0 :                 bus->p->drivers_autoprobe = 1;
     242           0 :         return count;
     243             : }
     244             : 
     245           0 : static ssize_t drivers_probe_store(struct bus_type *bus,
     246             :                                    const char *buf, size_t count)
     247             : {
     248           0 :         struct device *dev;
     249           0 :         int err = -EINVAL;
     250             : 
     251           0 :         dev = bus_find_device_by_name(bus, NULL, buf);
     252           0 :         if (!dev)
     253             :                 return -ENODEV;
     254           0 :         if (bus_rescan_devices_helper(dev, NULL) == 0)
     255           0 :                 err = count;
     256           0 :         put_device(dev);
     257           0 :         return err;
     258             : }
     259             : 
     260          51 : static struct device *next_device(struct klist_iter *i)
     261             : {
     262          51 :         struct klist_node *n = klist_next(i);
     263          51 :         struct device *dev = NULL;
     264          51 :         struct device_private *dev_prv;
     265             : 
     266          51 :         if (n) {
     267          36 :                 dev_prv = to_device_private_bus(n);
     268          36 :                 dev = dev_prv->device;
     269             :         }
     270          36 :         return dev;
     271             : }
     272             : 
     273             : /**
     274             :  * bus_for_each_dev - device iterator.
     275             :  * @bus: bus type.
     276             :  * @start: device to start iterating from.
     277             :  * @data: data for the callback.
     278             :  * @fn: function to be called for each device.
     279             :  *
     280             :  * Iterate over @bus's list of devices, and call @fn for each,
     281             :  * passing it @data. If @start is not NULL, we use that device to
     282             :  * begin iterating from.
     283             :  *
     284             :  * We check the return of @fn each time. If it returns anything
     285             :  * other than 0, we break out and return that value.
     286             :  *
     287             :  * NOTE: The device that returns a non-zero value is not retained
     288             :  * in any way, nor is its refcount incremented. If the caller needs
     289             :  * to retain this data, it should do so, and increment the reference
     290             :  * count in the supplied callback.
     291             :  */
     292          15 : int bus_for_each_dev(struct bus_type *bus, struct device *start,
     293             :                      void *data, int (*fn)(struct device *, void *))
     294             : {
     295          15 :         struct klist_iter i;
     296          15 :         struct device *dev;
     297          15 :         int error = 0;
     298             : 
     299          15 :         if (!bus || !bus->p)
     300             :                 return -EINVAL;
     301             : 
     302          15 :         klist_iter_init_node(&bus->p->klist_devices, &i,
     303           0 :                              (start ? &start->p->knode_bus : NULL));
     304          87 :         while (!error && (dev = next_device(&i)))
     305          36 :                 error = fn(dev, data);
     306          15 :         klist_iter_exit(&i);
     307          15 :         return error;
     308             : }
     309             : EXPORT_SYMBOL_GPL(bus_for_each_dev);
     310             : 
     311             : /**
     312             :  * bus_find_device - device iterator for locating a particular device.
     313             :  * @bus: bus type
     314             :  * @start: Device to begin with
     315             :  * @data: Data to pass to match function
     316             :  * @match: Callback function to check device
     317             :  *
     318             :  * This is similar to the bus_for_each_dev() function above, but it
     319             :  * returns a reference to a device that is 'found' for later use, as
     320             :  * determined by the @match callback.
     321             :  *
     322             :  * The callback should return 0 if the device doesn't match and non-zero
     323             :  * if it does.  If the callback returns non-zero, this function will
     324             :  * return to the caller and not iterate over any more devices.
     325             :  */
     326           0 : struct device *bus_find_device(struct bus_type *bus,
     327             :                                struct device *start, const void *data,
     328             :                                int (*match)(struct device *dev, const void *data))
     329             : {
     330           0 :         struct klist_iter i;
     331           0 :         struct device *dev;
     332             : 
     333           0 :         if (!bus || !bus->p)
     334             :                 return NULL;
     335             : 
     336           0 :         klist_iter_init_node(&bus->p->klist_devices, &i,
     337           0 :                              (start ? &start->p->knode_bus : NULL));
     338           0 :         while ((dev = next_device(&i)))
     339           0 :                 if (match(dev, data) && get_device(dev))
     340             :                         break;
     341           0 :         klist_iter_exit(&i);
     342           0 :         return dev;
     343             : }
     344             : EXPORT_SYMBOL_GPL(bus_find_device);
     345             : 
     346             : /**
     347             :  * subsys_find_device_by_id - find a device with a specific enumeration number
     348             :  * @subsys: subsystem
     349             :  * @id: index 'id' in struct device
     350             :  * @hint: device to check first
     351             :  *
     352             :  * Check the hint's next object and if it is a match return it directly,
     353             :  * otherwise, fall back to a full list search. Either way a reference for
     354             :  * the returned object is taken.
     355             :  */
     356           0 : struct device *subsys_find_device_by_id(struct bus_type *subsys, unsigned int id,
     357             :                                         struct device *hint)
     358             : {
     359           0 :         struct klist_iter i;
     360           0 :         struct device *dev;
     361             : 
     362           0 :         if (!subsys)
     363             :                 return NULL;
     364             : 
     365           0 :         if (hint) {
     366           0 :                 klist_iter_init_node(&subsys->p->klist_devices, &i, &hint->p->knode_bus);
     367           0 :                 dev = next_device(&i);
     368           0 :                 if (dev && dev->id == id && get_device(dev)) {
     369           0 :                         klist_iter_exit(&i);
     370           0 :                         return dev;
     371             :                 }
     372           0 :                 klist_iter_exit(&i);
     373             :         }
     374             : 
     375           0 :         klist_iter_init_node(&subsys->p->klist_devices, &i, NULL);
     376           0 :         while ((dev = next_device(&i))) {
     377           0 :                 if (dev->id == id && get_device(dev)) {
     378           0 :                         klist_iter_exit(&i);
     379           0 :                         return dev;
     380             :                 }
     381             :         }
     382           0 :         klist_iter_exit(&i);
     383           0 :         return NULL;
     384             : }
     385             : EXPORT_SYMBOL_GPL(subsys_find_device_by_id);
     386             : 
     387          26 : static struct device_driver *next_driver(struct klist_iter *i)
     388             : {
     389          52 :         struct klist_node *n = klist_next(i);
     390          26 :         struct driver_private *drv_priv;
     391             : 
     392          26 :         if (n) {
     393           2 :                 drv_priv = container_of(n, struct driver_private, knode_bus);
     394           2 :                 return drv_priv->driver;
     395             :         }
     396             :         return NULL;
     397             : }
     398             : 
     399             : /**
     400             :  * bus_for_each_drv - driver iterator
     401             :  * @bus: bus we're dealing with.
     402             :  * @start: driver to start iterating on.
     403             :  * @data: data to pass to the callback.
     404             :  * @fn: function to call for each driver.
     405             :  *
     406             :  * This is nearly identical to the device iterator above.
     407             :  * We iterate over each driver that belongs to @bus, and call
     408             :  * @fn for each. If @fn returns anything but 0, we break out
     409             :  * and return it. If @start is not NULL, we use it as the head
     410             :  * of the list.
     411             :  *
     412             :  * NOTE: we don't return the driver that returns a non-zero
     413             :  * value, nor do we leave the reference count incremented for that
     414             :  * driver. If the caller needs to know that info, it must set it
     415             :  * in the callback. It must also be sure to increment the refcount
     416             :  * so it doesn't disappear before returning to the caller.
     417             :  */
     418          24 : int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
     419             :                      void *data, int (*fn)(struct device_driver *, void *))
     420             : {
     421          24 :         struct klist_iter i;
     422          24 :         struct device_driver *drv;
     423          24 :         int error = 0;
     424             : 
     425          24 :         if (!bus)
     426             :                 return -EINVAL;
     427             : 
     428          24 :         klist_iter_init_node(&bus->p->klist_drivers, &i,
     429           0 :                              start ? &start->p->knode_bus : NULL);
     430          28 :         while ((drv = next_driver(&i)) && !error)
     431           2 :                 error = fn(drv, data);
     432          24 :         klist_iter_exit(&i);
     433          24 :         return error;
     434             : }
     435             : EXPORT_SYMBOL_GPL(bus_for_each_drv);
     436             : 
     437             : /**
     438             :  * bus_add_device - add device to bus
     439             :  * @dev: device being added
     440             :  *
     441             :  * - Add device's bus attributes.
     442             :  * - Create links to device's bus.
     443             :  * - Add the device to its bus's list of devices.
     444             :  */
     445         175 : int bus_add_device(struct device *dev)
     446             : {
     447         175 :         struct bus_type *bus = bus_get(dev->bus);
     448         199 :         int error = 0;
     449             : 
     450          24 :         if (bus) {
     451          24 :                 pr_debug("bus: '%s': add device %s\n", bus->name, dev_name(dev));
     452          24 :                 error = device_add_groups(dev, bus->dev_groups);
     453          24 :                 if (error)
     454           0 :                         goto out_put;
     455          48 :                 error = sysfs_create_link(&bus->p->devices_kset->kobj,
     456             :                                                 &dev->kobj, dev_name(dev));
     457          24 :                 if (error)
     458           0 :                         goto out_groups;
     459          48 :                 error = sysfs_create_link(&dev->kobj,
     460          24 :                                 &dev->bus->p->subsys.kobj, "subsystem");
     461          24 :                 if (error)
     462           0 :                         goto out_subsys;
     463          24 :                 klist_add_tail(&dev->p->knode_bus, &bus->p->klist_devices);
     464             :         }
     465             :         return 0;
     466             : 
     467           0 : out_subsys:
     468           0 :         sysfs_remove_link(&bus->p->devices_kset->kobj, dev_name(dev));
     469           0 : out_groups:
     470           0 :         device_remove_groups(dev, bus->dev_groups);
     471           0 : out_put:
     472           0 :         bus_put(dev->bus);
     473             :         return error;
     474             : }
     475             : 
     476             : /**
     477             :  * bus_probe_device - probe drivers for a new device
     478             :  * @dev: device to probe
     479             :  *
     480             :  * - Automatically probe for a driver if the bus allows it.
     481             :  */
     482         175 : void bus_probe_device(struct device *dev)
     483             : {
     484         175 :         struct bus_type *bus = dev->bus;
     485         175 :         struct subsys_interface *sif;
     486             : 
     487         175 :         if (!bus)
     488             :                 return;
     489             : 
     490          24 :         if (bus->p->drivers_autoprobe)
     491          24 :                 device_initial_probe(dev);
     492             : 
     493          24 :         mutex_lock(&bus->p->mutex);
     494          24 :         list_for_each_entry(sif, &bus->p->interfaces, node)
     495           0 :                 if (sif->add_dev)
     496           0 :                         sif->add_dev(dev, sif);
     497          24 :         mutex_unlock(&bus->p->mutex);
     498             : }
     499             : 
     500             : /**
     501             :  * bus_remove_device - remove device from bus
     502             :  * @dev: device to be removed
     503             :  *
     504             :  * - Remove device from all interfaces.
     505             :  * - Remove symlink from bus' directory.
     506             :  * - Delete device from bus's list.
     507             :  * - Detach from its driver.
     508             :  * - Drop reference taken in bus_add_device().
     509             :  */
     510           0 : void bus_remove_device(struct device *dev)
     511             : {
     512           0 :         struct bus_type *bus = dev->bus;
     513           0 :         struct subsys_interface *sif;
     514             : 
     515           0 :         if (!bus)
     516             :                 return;
     517             : 
     518           0 :         mutex_lock(&bus->p->mutex);
     519           0 :         list_for_each_entry(sif, &bus->p->interfaces, node)
     520           0 :                 if (sif->remove_dev)
     521           0 :                         sif->remove_dev(dev, sif);
     522           0 :         mutex_unlock(&bus->p->mutex);
     523             : 
     524           0 :         sysfs_remove_link(&dev->kobj, "subsystem");
     525           0 :         sysfs_remove_link(&dev->bus->p->devices_kset->kobj,
     526             :                           dev_name(dev));
     527           0 :         device_remove_groups(dev, dev->bus->dev_groups);
     528           0 :         if (klist_node_attached(&dev->p->knode_bus))
     529           0 :                 klist_del(&dev->p->knode_bus);
     530             : 
     531           0 :         pr_debug("bus: '%s': remove device %s\n",
     532             :                  dev->bus->name, dev_name(dev));
     533           0 :         device_release_driver(dev);
     534           0 :         bus_put(dev->bus);
     535             : }
     536             : 
     537          14 : static int __must_check add_bind_files(struct device_driver *drv)
     538             : {
     539          14 :         int ret;
     540             : 
     541          14 :         ret = driver_create_file(drv, &driver_attr_unbind);
     542          14 :         if (ret == 0) {
     543          14 :                 ret = driver_create_file(drv, &driver_attr_bind);
     544          14 :                 if (ret)
     545           0 :                         driver_remove_file(drv, &driver_attr_unbind);
     546             :         }
     547          14 :         return ret;
     548             : }
     549             : 
     550           0 : static void remove_bind_files(struct device_driver *drv)
     551             : {
     552           0 :         driver_remove_file(drv, &driver_attr_bind);
     553           0 :         driver_remove_file(drv, &driver_attr_unbind);
     554           0 : }
     555             : 
     556             : static BUS_ATTR_WO(drivers_probe);
     557             : static BUS_ATTR_RW(drivers_autoprobe);
     558             : 
     559          10 : static int add_probe_files(struct bus_type *bus)
     560             : {
     561          10 :         int retval;
     562             : 
     563          10 :         retval = bus_create_file(bus, &bus_attr_drivers_probe);
     564          10 :         if (retval)
     565           0 :                 goto out;
     566             : 
     567          10 :         retval = bus_create_file(bus, &bus_attr_drivers_autoprobe);
     568          10 :         if (retval)
     569           0 :                 bus_remove_file(bus, &bus_attr_drivers_probe);
     570          10 : out:
     571          10 :         return retval;
     572             : }
     573             : 
     574           0 : static void remove_probe_files(struct bus_type *bus)
     575             : {
     576           0 :         bus_remove_file(bus, &bus_attr_drivers_autoprobe);
     577           0 :         bus_remove_file(bus, &bus_attr_drivers_probe);
     578           0 : }
     579             : 
     580          14 : static ssize_t uevent_store(struct device_driver *drv, const char *buf,
     581             :                             size_t count)
     582             : {
     583          14 :         int rc;
     584             : 
     585          14 :         rc = kobject_synth_uevent(&drv->p->kobj, buf, count);
     586          14 :         return rc ? rc : count;
     587             : }
     588             : static DRIVER_ATTR_WO(uevent);
     589             : 
     590             : /**
     591             :  * bus_add_driver - Add a driver to the bus.
     592             :  * @drv: driver.
     593             :  */
     594          15 : int bus_add_driver(struct device_driver *drv)
     595             : {
     596          15 :         struct bus_type *bus;
     597          15 :         struct driver_private *priv;
     598          15 :         int error = 0;
     599             : 
     600          15 :         bus = bus_get(drv->bus);
     601          15 :         if (!bus)
     602             :                 return -EINVAL;
     603             : 
     604          15 :         pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name);
     605             : 
     606          15 :         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
     607          15 :         if (!priv) {
     608           0 :                 error = -ENOMEM;
     609           0 :                 goto out_put_bus;
     610             :         }
     611          15 :         klist_init(&priv->klist_devices, NULL, NULL);
     612          15 :         priv->driver = drv;
     613          15 :         drv->p = priv;
     614          15 :         priv->kobj.kset = bus->p->drivers_kset;
     615          15 :         error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
     616             :                                      "%s", drv->name);
     617          15 :         if (error)
     618           0 :                 goto out_unregister;
     619             : 
     620          15 :         klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
     621          15 :         if (drv->bus->p->drivers_autoprobe) {
     622          15 :                 error = driver_attach(drv);
     623          15 :                 if (error)
     624           0 :                         goto out_unregister;
     625             :         }
     626          15 :         module_add_driver(drv->owner, drv);
     627             : 
     628          15 :         error = driver_create_file(drv, &driver_attr_uevent);
     629          15 :         if (error) {
     630           0 :                 printk(KERN_ERR "%s: uevent attr (%s) failed\n",
     631             :                         __func__, drv->name);
     632             :         }
     633          15 :         error = driver_add_groups(drv, bus->drv_groups);
     634          15 :         if (error) {
     635             :                 /* How the hell do we get out of this pickle? Give up */
     636           0 :                 printk(KERN_ERR "%s: driver_add_groups(%s) failed\n",
     637             :                         __func__, drv->name);
     638             :         }
     639             : 
     640          15 :         if (!drv->suppress_bind_attrs) {
     641          14 :                 error = add_bind_files(drv);
     642          14 :                 if (error) {
     643             :                         /* Ditto */
     644           0 :                         printk(KERN_ERR "%s: add_bind_files(%s) failed\n",
     645             :                                 __func__, drv->name);
     646             :                 }
     647             :         }
     648             : 
     649             :         return 0;
     650             : 
     651           0 : out_unregister:
     652           0 :         kobject_put(&priv->kobj);
     653             :         /* drv->p is freed in driver_release()  */
     654           0 :         drv->p = NULL;
     655           0 : out_put_bus:
     656           0 :         bus_put(bus);
     657           0 :         return error;
     658             : }
     659             : 
     660             : /**
     661             :  * bus_remove_driver - delete driver from bus's knowledge.
     662             :  * @drv: driver.
     663             :  *
     664             :  * Detach the driver from the devices it controls, and remove
     665             :  * it from its bus's list of drivers. Finally, we drop the reference
     666             :  * to the bus we took in bus_add_driver().
     667             :  */
     668           1 : void bus_remove_driver(struct device_driver *drv)
     669             : {
     670           1 :         if (!drv->bus)
     671             :                 return;
     672             : 
     673           1 :         if (!drv->suppress_bind_attrs)
     674           0 :                 remove_bind_files(drv);
     675           1 :         driver_remove_groups(drv, drv->bus->drv_groups);
     676           1 :         driver_remove_file(drv, &driver_attr_uevent);
     677           1 :         klist_remove(&drv->p->knode_bus);
     678           1 :         pr_debug("bus: '%s': remove driver %s\n", drv->bus->name, drv->name);
     679           1 :         driver_detach(drv);
     680           1 :         module_remove_driver(drv);
     681           1 :         kobject_put(&drv->p->kobj);
     682           1 :         bus_put(drv->bus);
     683             : }
     684             : 
     685             : /* Helper for bus_rescan_devices's iter */
     686           0 : static int __must_check bus_rescan_devices_helper(struct device *dev,
     687             :                                                   void *data)
     688             : {
     689           0 :         int ret = 0;
     690             : 
     691           0 :         if (!dev->driver) {
     692           0 :                 if (dev->parent && dev->bus->need_parent_lock)
     693           0 :                         device_lock(dev->parent);
     694           0 :                 ret = device_attach(dev);
     695           0 :                 if (dev->parent && dev->bus->need_parent_lock)
     696           0 :                         device_unlock(dev->parent);
     697             :         }
     698           0 :         return ret < 0 ? ret : 0;
     699             : }
     700             : 
     701             : /**
     702             :  * bus_rescan_devices - rescan devices on the bus for possible drivers
     703             :  * @bus: the bus to scan.
     704             :  *
     705             :  * This function will look for devices on the bus with no driver
     706             :  * attached and rescan it against existing drivers to see if it matches
     707             :  * any by calling device_attach() for the unbound devices.
     708             :  */
     709           0 : int bus_rescan_devices(struct bus_type *bus)
     710             : {
     711           0 :         return bus_for_each_dev(bus, NULL, NULL, bus_rescan_devices_helper);
     712             : }
     713             : EXPORT_SYMBOL_GPL(bus_rescan_devices);
     714             : 
     715             : /**
     716             :  * device_reprobe - remove driver for a device and probe for a new driver
     717             :  * @dev: the device to reprobe
     718             :  *
     719             :  * This function detaches the attached driver (if any) for the given
     720             :  * device and restarts the driver probing process.  It is intended
     721             :  * to use if probing criteria changed during a devices lifetime and
     722             :  * driver attachment should change accordingly.
     723             :  */
     724           0 : int device_reprobe(struct device *dev)
     725             : {
     726           0 :         if (dev->driver)
     727           0 :                 device_driver_detach(dev);
     728           0 :         return bus_rescan_devices_helper(dev, NULL);
     729             : }
     730             : EXPORT_SYMBOL_GPL(device_reprobe);
     731             : 
     732          10 : static int bus_add_groups(struct bus_type *bus,
     733             :                           const struct attribute_group **groups)
     734             : {
     735          10 :         return sysfs_create_groups(&bus->p->subsys.kobj, groups);
     736             : }
     737             : 
     738           0 : static void bus_remove_groups(struct bus_type *bus,
     739             :                               const struct attribute_group **groups)
     740             : {
     741           0 :         sysfs_remove_groups(&bus->p->subsys.kobj, groups);
     742             : }
     743             : 
     744          24 : static void klist_devices_get(struct klist_node *n)
     745             : {
     746          24 :         struct device_private *dev_prv = to_device_private_bus(n);
     747          24 :         struct device *dev = dev_prv->device;
     748             : 
     749          24 :         get_device(dev);
     750          24 : }
     751             : 
     752           0 : static void klist_devices_put(struct klist_node *n)
     753             : {
     754           0 :         struct device_private *dev_prv = to_device_private_bus(n);
     755           0 :         struct device *dev = dev_prv->device;
     756             : 
     757           0 :         put_device(dev);
     758           0 : }
     759             : 
     760          10 : static ssize_t bus_uevent_store(struct bus_type *bus,
     761             :                                 const char *buf, size_t count)
     762             : {
     763          10 :         int rc;
     764             : 
     765          10 :         rc = kobject_synth_uevent(&bus->p->subsys.kobj, buf, count);
     766          10 :         return rc ? rc : count;
     767             : }
     768             : /*
     769             :  * "open code" the old BUS_ATTR() macro here.  We want to use BUS_ATTR_WO()
     770             :  * here, but can not use it as earlier in the file we have
     771             :  * DEVICE_ATTR_WO(uevent), which would cause a clash with the with the store
     772             :  * function name.
     773             :  */
     774             : static struct bus_attribute bus_attr_uevent = __ATTR(uevent, S_IWUSR, NULL,
     775             :                                                      bus_uevent_store);
     776             : 
     777             : /**
     778             :  * bus_register - register a driver-core subsystem
     779             :  * @bus: bus to register
     780             :  *
     781             :  * Once we have that, we register the bus with the kobject
     782             :  * infrastructure, then register the children subsystems it has:
     783             :  * the devices and drivers that belong to the subsystem.
     784             :  */
     785          10 : int bus_register(struct bus_type *bus)
     786             : {
     787          10 :         int retval;
     788          10 :         struct subsys_private *priv;
     789          10 :         struct lock_class_key *key = &bus->lock_key;
     790             : 
     791          10 :         priv = kzalloc(sizeof(struct subsys_private), GFP_KERNEL);
     792          10 :         if (!priv)
     793             :                 return -ENOMEM;
     794             : 
     795          10 :         priv->bus = bus;
     796          10 :         bus->p = priv;
     797             : 
     798          10 :         BLOCKING_INIT_NOTIFIER_HEAD(&priv->bus_notifier);
     799             : 
     800          10 :         retval = kobject_set_name(&priv->subsys.kobj, "%s", bus->name);
     801          10 :         if (retval)
     802           0 :                 goto out;
     803             : 
     804          10 :         priv->subsys.kobj.kset = bus_kset;
     805          10 :         priv->subsys.kobj.ktype = &bus_ktype;
     806          10 :         priv->drivers_autoprobe = 1;
     807             : 
     808          10 :         retval = kset_register(&priv->subsys);
     809          10 :         if (retval)
     810           0 :                 goto out;
     811             : 
     812          10 :         retval = bus_create_file(bus, &bus_attr_uevent);
     813          10 :         if (retval)
     814           0 :                 goto bus_uevent_fail;
     815             : 
     816          10 :         priv->devices_kset = kset_create_and_add("devices", NULL,
     817             :                                                  &priv->subsys.kobj);
     818          10 :         if (!priv->devices_kset) {
     819           0 :                 retval = -ENOMEM;
     820           0 :                 goto bus_devices_fail;
     821             :         }
     822             : 
     823          10 :         priv->drivers_kset = kset_create_and_add("drivers", NULL,
     824             :                                                  &priv->subsys.kobj);
     825          10 :         if (!priv->drivers_kset) {
     826           0 :                 retval = -ENOMEM;
     827           0 :                 goto bus_drivers_fail;
     828             :         }
     829             : 
     830          10 :         INIT_LIST_HEAD(&priv->interfaces);
     831          10 :         __mutex_init(&priv->mutex, "subsys mutex", key);
     832          10 :         klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put);
     833          10 :         klist_init(&priv->klist_drivers, NULL, NULL);
     834             : 
     835          10 :         retval = add_probe_files(bus);
     836          10 :         if (retval)
     837           0 :                 goto bus_probe_files_fail;
     838             : 
     839          10 :         retval = bus_add_groups(bus, bus->bus_groups);
     840          10 :         if (retval)
     841           0 :                 goto bus_groups_fail;
     842             : 
     843             :         pr_debug("bus: '%s': registered\n", bus->name);
     844             :         return 0;
     845             : 
     846           0 : bus_groups_fail:
     847           0 :         remove_probe_files(bus);
     848           0 : bus_probe_files_fail:
     849           0 :         kset_unregister(bus->p->drivers_kset);
     850           0 : bus_drivers_fail:
     851           0 :         kset_unregister(bus->p->devices_kset);
     852           0 : bus_devices_fail:
     853           0 :         bus_remove_file(bus, &bus_attr_uevent);
     854           0 : bus_uevent_fail:
     855           0 :         kset_unregister(&bus->p->subsys);
     856           0 : out:
     857           0 :         kfree(bus->p);
     858           0 :         bus->p = NULL;
     859           0 :         return retval;
     860             : }
     861             : EXPORT_SYMBOL_GPL(bus_register);
     862             : 
     863             : /**
     864             :  * bus_unregister - remove a bus from the system
     865             :  * @bus: bus.
     866             :  *
     867             :  * Unregister the child subsystems and the bus itself.
     868             :  * Finally, we call bus_put() to release the refcount
     869             :  */
     870           0 : void bus_unregister(struct bus_type *bus)
     871             : {
     872           0 :         pr_debug("bus: '%s': unregistering\n", bus->name);
     873           0 :         if (bus->dev_root)
     874           0 :                 device_unregister(bus->dev_root);
     875           0 :         bus_remove_groups(bus, bus->bus_groups);
     876           0 :         remove_probe_files(bus);
     877           0 :         kset_unregister(bus->p->drivers_kset);
     878           0 :         kset_unregister(bus->p->devices_kset);
     879           0 :         bus_remove_file(bus, &bus_attr_uevent);
     880           0 :         kset_unregister(&bus->p->subsys);
     881           0 : }
     882             : EXPORT_SYMBOL_GPL(bus_unregister);
     883             : 
     884           0 : int bus_register_notifier(struct bus_type *bus, struct notifier_block *nb)
     885             : {
     886           0 :         return blocking_notifier_chain_register(&bus->p->bus_notifier, nb);
     887             : }
     888             : EXPORT_SYMBOL_GPL(bus_register_notifier);
     889             : 
     890           0 : int bus_unregister_notifier(struct bus_type *bus, struct notifier_block *nb)
     891             : {
     892           0 :         return blocking_notifier_chain_unregister(&bus->p->bus_notifier, nb);
     893             : }
     894             : EXPORT_SYMBOL_GPL(bus_unregister_notifier);
     895             : 
     896           0 : struct kset *bus_get_kset(struct bus_type *bus)
     897             : {
     898           0 :         return &bus->p->subsys;
     899             : }
     900             : EXPORT_SYMBOL_GPL(bus_get_kset);
     901             : 
     902           0 : struct klist *bus_get_device_klist(struct bus_type *bus)
     903             : {
     904           0 :         return &bus->p->klist_devices;
     905             : }
     906             : EXPORT_SYMBOL_GPL(bus_get_device_klist);
     907             : 
     908             : /*
     909             :  * Yes, this forcibly breaks the klist abstraction temporarily.  It
     910             :  * just wants to sort the klist, not change reference counts and
     911             :  * take/drop locks rapidly in the process.  It does all this while
     912             :  * holding the lock for the list, so objects can't otherwise be
     913             :  * added/removed while we're swizzling.
     914             :  */
     915           0 : static void device_insertion_sort_klist(struct device *a, struct list_head *list,
     916             :                                         int (*compare)(const struct device *a,
     917             :                                                         const struct device *b))
     918             : {
     919           0 :         struct klist_node *n;
     920           0 :         struct device_private *dev_prv;
     921           0 :         struct device *b;
     922             : 
     923           0 :         list_for_each_entry(n, list, n_node) {
     924           0 :                 dev_prv = to_device_private_bus(n);
     925           0 :                 b = dev_prv->device;
     926           0 :                 if (compare(a, b) <= 0) {
     927           0 :                         list_move_tail(&a->p->knode_bus.n_node,
     928           0 :                                        &b->p->knode_bus.n_node);
     929           0 :                         return;
     930             :                 }
     931             :         }
     932           0 :         list_move_tail(&a->p->knode_bus.n_node, list);
     933             : }
     934             : 
     935           0 : void bus_sort_breadthfirst(struct bus_type *bus,
     936             :                            int (*compare)(const struct device *a,
     937             :                                           const struct device *b))
     938             : {
     939           0 :         LIST_HEAD(sorted_devices);
     940           0 :         struct klist_node *n, *tmp;
     941           0 :         struct device_private *dev_prv;
     942           0 :         struct device *dev;
     943           0 :         struct klist *device_klist;
     944             : 
     945           0 :         device_klist = bus_get_device_klist(bus);
     946             : 
     947           0 :         spin_lock(&device_klist->k_lock);
     948           0 :         list_for_each_entry_safe(n, tmp, &device_klist->k_list, n_node) {
     949           0 :                 dev_prv = to_device_private_bus(n);
     950           0 :                 dev = dev_prv->device;
     951           0 :                 device_insertion_sort_klist(dev, &sorted_devices, compare);
     952             :         }
     953           0 :         list_splice(&sorted_devices, &device_klist->k_list);
     954           0 :         spin_unlock(&device_klist->k_lock);
     955           0 : }
     956             : EXPORT_SYMBOL_GPL(bus_sort_breadthfirst);
     957             : 
     958             : /**
     959             :  * subsys_dev_iter_init - initialize subsys device iterator
     960             :  * @iter: subsys iterator to initialize
     961             :  * @subsys: the subsys we wanna iterate over
     962             :  * @start: the device to start iterating from, if any
     963             :  * @type: device_type of the devices to iterate over, NULL for all
     964             :  *
     965             :  * Initialize subsys iterator @iter such that it iterates over devices
     966             :  * of @subsys.  If @start is set, the list iteration will start there,
     967             :  * otherwise if it is NULL, the iteration starts at the beginning of
     968             :  * the list.
     969             :  */
     970           0 : void subsys_dev_iter_init(struct subsys_dev_iter *iter, struct bus_type *subsys,
     971             :                           struct device *start, const struct device_type *type)
     972             : {
     973           0 :         struct klist_node *start_knode = NULL;
     974             : 
     975           0 :         if (start)
     976           0 :                 start_knode = &start->p->knode_bus;
     977           0 :         klist_iter_init_node(&subsys->p->klist_devices, &iter->ki, start_knode);
     978           0 :         iter->type = type;
     979           0 : }
     980             : EXPORT_SYMBOL_GPL(subsys_dev_iter_init);
     981             : 
     982             : /**
     983             :  * subsys_dev_iter_next - iterate to the next device
     984             :  * @iter: subsys iterator to proceed
     985             :  *
     986             :  * Proceed @iter to the next device and return it.  Returns NULL if
     987             :  * iteration is complete.
     988             :  *
     989             :  * The returned device is referenced and won't be released till
     990             :  * iterator is proceed to the next device or exited.  The caller is
     991             :  * free to do whatever it wants to do with the device including
     992             :  * calling back into subsys code.
     993             :  */
     994           0 : struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter)
     995             : {
     996           0 :         struct klist_node *knode;
     997           0 :         struct device *dev;
     998             : 
     999           0 :         for (;;) {
    1000           0 :                 knode = klist_next(&iter->ki);
    1001           0 :                 if (!knode)
    1002             :                         return NULL;
    1003           0 :                 dev = to_device_private_bus(knode)->device;
    1004           0 :                 if (!iter->type || iter->type == dev->type)
    1005           0 :                         return dev;
    1006             :         }
    1007             : }
    1008             : EXPORT_SYMBOL_GPL(subsys_dev_iter_next);
    1009             : 
    1010             : /**
    1011             :  * subsys_dev_iter_exit - finish iteration
    1012             :  * @iter: subsys iterator to finish
    1013             :  *
    1014             :  * Finish an iteration.  Always call this function after iteration is
    1015             :  * complete whether the iteration ran till the end or not.
    1016             :  */
    1017           0 : void subsys_dev_iter_exit(struct subsys_dev_iter *iter)
    1018             : {
    1019           0 :         klist_iter_exit(&iter->ki);
    1020           0 : }
    1021             : EXPORT_SYMBOL_GPL(subsys_dev_iter_exit);
    1022             : 
    1023           0 : int subsys_interface_register(struct subsys_interface *sif)
    1024             : {
    1025           0 :         struct bus_type *subsys;
    1026           0 :         struct subsys_dev_iter iter;
    1027           0 :         struct device *dev;
    1028             : 
    1029           0 :         if (!sif || !sif->subsys)
    1030             :                 return -ENODEV;
    1031             : 
    1032           0 :         subsys = bus_get(sif->subsys);
    1033           0 :         if (!subsys)
    1034             :                 return -EINVAL;
    1035             : 
    1036           0 :         mutex_lock(&subsys->p->mutex);
    1037           0 :         list_add_tail(&sif->node, &subsys->p->interfaces);
    1038           0 :         if (sif->add_dev) {
    1039           0 :                 subsys_dev_iter_init(&iter, subsys, NULL, NULL);
    1040           0 :                 while ((dev = subsys_dev_iter_next(&iter)))
    1041           0 :                         sif->add_dev(dev, sif);
    1042           0 :                 subsys_dev_iter_exit(&iter);
    1043             :         }
    1044           0 :         mutex_unlock(&subsys->p->mutex);
    1045             : 
    1046           0 :         return 0;
    1047             : }
    1048             : EXPORT_SYMBOL_GPL(subsys_interface_register);
    1049             : 
    1050           0 : void subsys_interface_unregister(struct subsys_interface *sif)
    1051             : {
    1052           0 :         struct bus_type *subsys;
    1053           0 :         struct subsys_dev_iter iter;
    1054           0 :         struct device *dev;
    1055             : 
    1056           0 :         if (!sif || !sif->subsys)
    1057           0 :                 return;
    1058             : 
    1059           0 :         subsys = sif->subsys;
    1060             : 
    1061           0 :         mutex_lock(&subsys->p->mutex);
    1062           0 :         list_del_init(&sif->node);
    1063           0 :         if (sif->remove_dev) {
    1064           0 :                 subsys_dev_iter_init(&iter, subsys, NULL, NULL);
    1065           0 :                 while ((dev = subsys_dev_iter_next(&iter)))
    1066           0 :                         sif->remove_dev(dev, sif);
    1067           0 :                 subsys_dev_iter_exit(&iter);
    1068             :         }
    1069           0 :         mutex_unlock(&subsys->p->mutex);
    1070             : 
    1071           0 :         bus_put(subsys);
    1072             : }
    1073             : EXPORT_SYMBOL_GPL(subsys_interface_unregister);
    1074             : 
    1075           0 : static void system_root_device_release(struct device *dev)
    1076             : {
    1077           0 :         kfree(dev);
    1078           0 : }
    1079             : 
    1080           6 : static int subsys_register(struct bus_type *subsys,
    1081             :                            const struct attribute_group **groups,
    1082             :                            struct kobject *parent_of_root)
    1083             : {
    1084           6 :         struct device *dev;
    1085           6 :         int err;
    1086             : 
    1087           6 :         err = bus_register(subsys);
    1088           6 :         if (err < 0)
    1089             :                 return err;
    1090             : 
    1091           6 :         dev = kzalloc(sizeof(struct device), GFP_KERNEL);
    1092           6 :         if (!dev) {
    1093           0 :                 err = -ENOMEM;
    1094           0 :                 goto err_dev;
    1095             :         }
    1096             : 
    1097           6 :         err = dev_set_name(dev, "%s", subsys->name);
    1098           6 :         if (err < 0)
    1099           0 :                 goto err_name;
    1100             : 
    1101           6 :         dev->kobj.parent = parent_of_root;
    1102           6 :         dev->groups = groups;
    1103           6 :         dev->release = system_root_device_release;
    1104             : 
    1105           6 :         err = device_register(dev);
    1106           6 :         if (err < 0)
    1107           0 :                 goto err_dev_reg;
    1108             : 
    1109           6 :         subsys->dev_root = dev;
    1110           6 :         return 0;
    1111             : 
    1112           0 : err_dev_reg:
    1113           0 :         put_device(dev);
    1114           0 :         dev = NULL;
    1115           0 : err_name:
    1116           0 :         kfree(dev);
    1117           0 : err_dev:
    1118           0 :         bus_unregister(subsys);
    1119           0 :         return err;
    1120             : }
    1121             : 
    1122             : /**
    1123             :  * subsys_system_register - register a subsystem at /sys/devices/system/
    1124             :  * @subsys: system subsystem
    1125             :  * @groups: default attributes for the root device
    1126             :  *
    1127             :  * All 'system' subsystems have a /sys/devices/system/<name> root device
    1128             :  * with the name of the subsystem. The root device can carry subsystem-
    1129             :  * wide attributes. All registered devices are below this single root
    1130             :  * device and are named after the subsystem with a simple enumeration
    1131             :  * number appended. The registered devices are not explicitly named;
    1132             :  * only 'id' in the device needs to be set.
    1133             :  *
    1134             :  * Do not use this interface for anything new, it exists for compatibility
    1135             :  * with bad ideas only. New subsystems should use plain subsystems; and
    1136             :  * add the subsystem-wide attributes should be added to the subsystem
    1137             :  * directory itself and not some create fake root-device placed in
    1138             :  * /sys/devices/system/<name>.
    1139             :  */
    1140           5 : int subsys_system_register(struct bus_type *subsys,
    1141             :                            const struct attribute_group **groups)
    1142             : {
    1143           5 :         return subsys_register(subsys, groups, &system_kset->kobj);
    1144             : }
    1145             : EXPORT_SYMBOL_GPL(subsys_system_register);
    1146             : 
    1147             : /**
    1148             :  * subsys_virtual_register - register a subsystem at /sys/devices/virtual/
    1149             :  * @subsys: virtual subsystem
    1150             :  * @groups: default attributes for the root device
    1151             :  *
    1152             :  * All 'virtual' subsystems have a /sys/devices/system/<name> root device
    1153             :  * with the name of the subystem.  The root device can carry subsystem-wide
    1154             :  * attributes.  All registered devices are below this single root device.
    1155             :  * There's no restriction on device naming.  This is for kernel software
    1156             :  * constructs which need sysfs interface.
    1157             :  */
    1158           1 : int subsys_virtual_register(struct bus_type *subsys,
    1159             :                             const struct attribute_group **groups)
    1160             : {
    1161           1 :         struct kobject *virtual_dir;
    1162             : 
    1163           1 :         virtual_dir = virtual_device_parent(NULL);
    1164           1 :         if (!virtual_dir)
    1165             :                 return -ENOMEM;
    1166             : 
    1167           1 :         return subsys_register(subsys, groups, virtual_dir);
    1168             : }
    1169             : EXPORT_SYMBOL_GPL(subsys_virtual_register);
    1170             : 
    1171           1 : int __init buses_init(void)
    1172             : {
    1173           1 :         bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
    1174           1 :         if (!bus_kset)
    1175             :                 return -ENOMEM;
    1176             : 
    1177           1 :         system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);
    1178           1 :         if (!system_kset)
    1179           0 :                 return -ENOMEM;
    1180             : 
    1181             :         return 0;
    1182             : }

Generated by: LCOV version 1.14