lkml.org 
[lkml]   [2007]   [Oct]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 31/75] Driver core: add uevent file for bus and driver
    Date
    From: Kay Sievers <kay.sievers@vrfy.org>

    This has been in the SuSE kernels for some time now.

    Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    drivers/base/bus.c | 35 +++++++++++++++++++++++++++++++++++
    1 files changed, 35 insertions(+), 0 deletions(-)

    diff --git a/drivers/base/bus.c b/drivers/base/bus.c
    index 0a8d075..6768a01 100644
    --- a/drivers/base/bus.c
    +++ b/drivers/base/bus.c
    @@ -610,6 +610,17 @@ static inline int add_probe_files(struct bus_type *bus) { return 0; }
    static inline void remove_probe_files(struct bus_type *bus) {}
    #endif

    +static ssize_t driver_uevent_store(struct device_driver *drv,
    + const char *buf, size_t count)
    +{
    + enum kobject_action action;
    +
    + if (kobject_action_type(buf, count, &action) == 0)
    + kobject_uevent(&drv->kobj, action);
    + return count;
    +}
    +static DRIVER_ATTR(uevent, S_IWUSR, NULL, driver_uevent_store);
    +
    /**
    * bus_add_driver - Add a driver to the bus.
    * @drv: driver.
    @@ -640,6 +651,11 @@ int bus_add_driver(struct device_driver *drv)
    klist_add_tail(&drv->knode_bus, &bus->klist_drivers);
    module_add_driver(drv->owner, drv);

    + error = driver_create_file(drv, &driver_attr_uevent);
    + if (error) {
    + printk(KERN_ERR "%s: uevent attr (%s) failed\n",
    + __FUNCTION__, drv->name);
    + }
    error = driver_add_attrs(bus, drv);
    if (error) {
    /* How the hell do we get out of this pickle? Give up */
    @@ -677,6 +693,7 @@ void bus_remove_driver(struct device_driver * drv)

    remove_bind_files(drv);
    driver_remove_attrs(drv->bus, drv);
    + driver_remove_file(drv, &driver_attr_uevent);
    klist_remove(&drv->knode_bus);
    pr_debug("bus %s: remove driver %s\n", drv->bus->name, drv->name);
    driver_detach(drv);
    @@ -804,6 +821,17 @@ static void klist_devices_put(struct klist_node *n)
    put_device(dev);
    }

    +static ssize_t bus_uevent_store(struct bus_type *bus,
    + const char *buf, size_t count)
    +{
    + enum kobject_action action;
    +
    + if (kobject_action_type(buf, count, &action) == 0)
    + kobject_uevent(&bus->subsys.kobj, action);
    + return count;
    +}
    +static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
    +
    /**
    * bus_register - register a bus with the system.
    * @bus: bus.
    @@ -828,6 +856,10 @@ int bus_register(struct bus_type * bus)
    if (retval)
    goto out;

    + retval = bus_create_file(bus, &bus_attr_uevent);
    + if (retval)
    + goto bus_uevent_fail;
    +
    kobject_set_name(&bus->devices.kobj, "devices");
    bus->devices.kobj.parent = &bus->subsys.kobj;
    retval = kset_register(&bus->devices);
    @@ -863,6 +895,8 @@ bus_probe_files_fail:
    bus_drivers_fail:
    kset_unregister(&bus->devices);
    bus_devices_fail:
    + bus_remove_file(bus, &bus_attr_uevent);
    +bus_uevent_fail:
    subsystem_unregister(&bus->subsys);
    out:
    return retval;
    @@ -882,6 +916,7 @@ void bus_unregister(struct bus_type * bus)
    remove_probe_files(bus);
    kset_unregister(&bus->drivers);
    kset_unregister(&bus->devices);
    + bus_remove_file(bus, &bus_attr_uevent);
    subsystem_unregister(&bus->subsys);
    }

    --
    1.5.3.4
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-10-13 00:39    [W:0.023 / U:0.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site