Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754359AbdGTAYk (ORCPT ); Wed, 19 Jul 2017 20:24:40 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:36402 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753527AbdGTAYj (ORCPT ); Wed, 19 Jul 2017 20:24:39 -0400 From: Dmitry Torokhov To: Greg Kroah-Hartman Cc: htejun@gmail.com, linux-kernel@vger.kernel.org, Guenter Roeck Subject: [PATCH v2 0/7] New bind/unbingd uevents Date: Wed, 19 Jul 2017 17:24:29 -0700 Message-Id: <20170720002436.29309-1-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.14.0.rc0.284.gd933b75aa4-goog Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3792 Lines: 94 Hi Greg, Here is the v2 of bind/unbind uevent patch series. The new bind/unbind will allow triggering firmware update through udev, and the new device sysfs API will cut down on some boilerplate code in drivers. As you requested, I moved the new functions to device.h, in the process I exported existing device_add_groups() and device_remove_groups() and called the new functions devm_device_{add|remove}_group[s]() to get away from the sysfs "rawness". 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 V2: - made device_{add|remove}_groups() public - added device_{add|remove}_group() helpers - the new devm APIs are moved into device.h and "sysfs" suffix dropped - added 3 patches showing use in the drivers V1: initial [re]post Dmitry Torokhov (7): driver core: emit uevents when device is bound to a driver driver core: make device_{add|remove}_groups() public driver core: add device_{add|remove}_group() helpers driver core: add devm_device_add_group() and friends Input: gpio_keys - use devm_device_add_group() for attributes Input: synaptics_rmi4 - use devm_device_add_group() for attributes in F01 Input: axp20x-pek - switch to using devm_device_add_group() drivers/base/base.h | 5 -- drivers/base/core.c | 132 +++++++++++++++++++++++++++++++++++++ drivers/base/dd.c | 4 ++ drivers/input/keyboard/gpio_keys.c | 16 +---- drivers/input/misc/axp20x-pek.c | 18 +---- drivers/input/rmi4/rmi_f01.c | 11 +--- include/linux/device.h | 30 +++++++++ include/linux/kobject.h | 2 + lib/kobject_uevent.c | 2 + 9 files changed, 176 insertions(+), 44 deletions(-) -- >8 -- >From 6d10e621578dffcca0ad785e4a73196aa25350f6 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov 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);