Messages in this thread Patch in this message | | | From | Dmitry Torokhov <> | Subject | [PATCH 0/2] New bind/unbingd uevents | Date | Tue, 18 Jul 2017 12:30:56 -0700 |
| |
Hi Greg,
I am resending the bind/unbind and devm_sysfs_create_group() patches, as you requested. The new bind/unbind will allow triggering firmware update through udev, and the new sysfs API will cut down on some boilerplate code in drivers.
Below is also a patch to systemd to stop dropping the new attributes (why they think they need to inspect and discard the data they do not understand is beyond me).
Thanks, Dmitry
Dmitry Torokhov (2): driver core: emit uevents when device is bound to a driver sysfs: add devm_sysfs_create_group() and friends
drivers/base/dd.c | 4 ++ fs/sysfs/group.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/kobject.h | 2 + include/linux/sysfs.h | 10 ++++ lib/kobject_uevent.c | 2 + 5 files changed, 142 insertions(+)
-- >8 --
From 6d10e621578dffcca0ad785e4a73196aa25350f6 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov <dmitry.torokhov@gmail.com> Date: Mon, 17 Jul 2017 20:10:17 -0700 Subject: [PATCH] Add handling for bind/unbind actions
Newer kernels will emit uevents with "bind" and "unbind" actions. These uevents will be issued when driver is bound to or unbound from a device. "Bind" events are helpful when device requires a firmware to operate properly, and driver is unable to create a child device before firmware is properly loaded.
For some reason systemd validates actions and drops the ones it does not know, instead of passing them on through as old udev did, so we need to explicitly teach it about them. --- src/libsystemd/sd-device/device-internal.h | 2 ++ src/libsystemd/sd-device/device-private.c | 2 ++ 2 files changed, 4 insertions(+)
diff --git a/src/libsystemd/sd-device/device-internal.h b/src/libsystemd/sd-device/device-internal.h index f4783deef..0505a2730 100644 --- a/src/libsystemd/sd-device/device-internal.h +++ b/src/libsystemd/sd-device/device-internal.h @@ -104,6 +104,8 @@ typedef enum DeviceAction { DEVICE_ACTION_MOVE, DEVICE_ACTION_ONLINE, DEVICE_ACTION_OFFLINE, + DEVICE_ACTION_BIND, + DEVICE_ACTION_UNBIND, _DEVICE_ACTION_MAX, _DEVICE_ACTION_INVALID = -1, } DeviceAction; diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index b4cd676c1..8839c3266 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -466,6 +466,8 @@ static const char* const device_action_table[_DEVICE_ACTION_MAX] = { [DEVICE_ACTION_MOVE] = "move", [DEVICE_ACTION_ONLINE] = "online", [DEVICE_ACTION_OFFLINE] = "offline", + [DEVICE_ACTION_BIND] = "bind", + [DEVICE_ACTION_UNBIND] = "unbind", }; DEFINE_STRING_TABLE_LOOKUP(device_action, DeviceAction); -- 2.13.2.932.g7449e964c-goog
| |