This patch series adds a feature to systemd, which is typically not allowed in a stable branch.
However I can see that there might be an argument that this is actually fixing a bug (needless re-triggering of devices) I'd love to get feedback from others as to whether I should take this patch. Steve On Wed, Jun 7, 2023 at 11:52 PM Pawan Badganchi <[email protected]> wrote: > > systemd-udev-trigger.service by default triggeres all devices regardless > of whether they were already recognized by systemd-udevd. > > There are machines (especially in embedded environments) where > systemd-udev-trigger.service is configured to run at a later stage of > the boot sequence, which can lead to quite a lot of devices being > triggered although they were already recognized by systemd-udevd. > > Re-triggering a lot of devices is a relatively expensive operation and > therefore should be avoided if unnecessary. > > Therefore this patch introduces --initialized-nomatch, which filters out > devices that are already present in the udev database. For consistance > reasons --initialized-match is implemented as well, which filters out devices > that are *not* already present in the udev database. > > Signed-off-by: Pawan Badganchi <[email protected]> > --- > ...-initialized-match-nomatch-arguments.patch | 156 ++++++++++++++++++ > meta/recipes-core/systemd/systemd_244.5.bb | 1 + > 2 files changed, 157 insertions(+) > create mode 100644 > meta/recipes-core/systemd/systemd/0001-udevadm-trigger-implement-initialized-match-nomatch-arguments.patch > > diff --git > a/meta/recipes-core/systemd/systemd/0001-udevadm-trigger-implement-initialized-match-nomatch-arguments.patch > > b/meta/recipes-core/systemd/systemd/0001-udevadm-trigger-implement-initialized-match-nomatch-arguments.patch > new file mode 100644 > index 0000000000..2f7da0aff9 > --- /dev/null > +++ > b/meta/recipes-core/systemd/systemd/0001-udevadm-trigger-implement-initialized-match-nomatch-arguments.patch > @@ -0,0 +1,156 @@ > +From 678f2b16676cd566c50bdec78350f732a9a3ee41 Mon Sep 17 00:00:00 2001 > +From: Danilo Krummrich <[email protected]> > +Date: Mon, 14 Jun 2021 17:46:00 +0200 > +Subject: [PATCH] udevadm: trigger: implement --initialized-match/nomatch > + arguments > + > +systemd-udev-trigger.service by default triggeres all devices regardless > +of whether they were already recognized by systemd-udevd. > + > +There are machines (especially in embedded environments) where > +systemd-udev-trigger.service is configured to run at a later stage of > +the boot sequence, which can lead to quite a lot of devices being > +triggered although they were already recognized by systemd-udevd. > + > +Re-triggering a lot of devices is a relatively expensive operation and > +therefore should be avoided if unnecessary. > + > +Therefore this patch introduces --initialized-nomatch, which filters out > +devices that are already present in the udev database. For consistance > +reasons --initialized-match is implemented as well, which filters out devices > +that are *not* already present in the udev database. > + > +Replaces #19949. > + > +Upstream-Status: Backport > [https://github.com/systemd/systemd/commit/678f2b16676cd566c50bdec78350f732a9a3ee41.patch] > +Comment: Refreshed hunk from udevadm, _udevadm and udevadm-trigger.c > +Signed-off-by: Pawan Badganchi <[email protected]> > +--- > + man/udevadm.xml | 29 +++++++++++++++++++++++++++++ > + shell-completion/bash/udevadm | 3 ++- > + shell-completion/zsh/_udevadm | 2 ++ > + src/udev/udevadm-trigger.c | 13 +++++++++++++ > + 4 files changed, 46 insertions(+), 1 deletion(-) > + > +diff --git a/man/udevadm.xml b/man/udevadm.xml > +index 24ed4a29c71d..af485711222e 100644 > +--- a/man/udevadm.xml > ++++ b/man/udevadm.xml > +@@ -395,6 +395,35 @@ > + then each matching result is ORed, that is, all children of > each specified device are triggered.</para> > + </listitem> > + </varlistentry> > ++ <varlistentry> > ++ <term><option>--initialized-match</option></term> > ++ <term><option>--initialized-nomatch</option></term> > ++ <listitem> > ++ <para>When <option>--initialized-match</option> is specified, > trigger events for devices > ++ that are already initialized by > <command>systemd-udevd</command>, and skip devices that > ++ are not initialized yet.</para> > ++ <para>When <option>--initialized-nomatch</option> is specified, > trigger events for devices > ++ that are not initialized by <command>systemd-udevd</command> > yet, and skip devices that > ++ are already initialized.</para> > ++ <para>Here, initialized devices are those for which at least > one udev rule already > ++ completed execution – for any action but > <literal>remove</literal> — that set a property > ++ or other device setting (and thus has an entry in the udev > device database). Devices are > ++ no longer considered initialized if a <literal>remove</literal> > action is seen for them > ++ (which removes their entry in the udev device database). Note > that devices that have no > ++ udev rules are never considered initialized, but might still be > announced via the sd-device > ++ API (or similar). Typically, it is thus essential that > applications which intend to use > ++ such a match, make sure a suitable udev rule is installed that > sets at least one property > ++ on devices that shall be matched.</para> > ++ <para>WARNING: <option>--initialized-nomatch</option> can > potentially save a significant > ++ amount of time compared to re-triggering all devices in the > system and e.g. can be used to > ++ optimize boot time. However, this is not safe to be used in a > boot sequence in general. > ++ Especially, when udev rules for a device depend on its parent > devices (e.g. > ++ <literal>ATTRS</literal> or <literal>IMPORT{parent}</literal> > keys, see > ++ > <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry> > ++ for more details), the final state of the device becomes easily > unstable with this option. > ++ </para> > ++ </listitem> > ++ </varlistentry> > + <varlistentry> > + <term><option>-w</option></term> > + <term><option>--settle</option></term> > +diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm > +index 4d52597cbfdf..23ce02365c7f 100644 > +--- a/shell-completion/bash/udevadm > ++++ b/shell-completion/bash/udevadm > +@@ -51,7 +51,8 @@ > + [INFO_STANDALONE]='-r --root -a --attribute-walk -x --export -e > --export-db -c --cleanup-db > + -w --wait-for-initialization' > + [INFO_ARG]='-q --query -p --path -n --name -P --export-prefix -d > --device-id-of-file' > +- [TRIGGER_STANDALONE]='-v --verbose -n --dry-run -w --settle > --wait-daemon' > ++ [TRIGGER_STANDALONE]='-v --verbose -n --dry-run -w --settle > --wait-daemon > ++ --initialized-match --initialized-nomatch' > + [TRIGGER_ARG]='-t --type -c --action -s --subsystem-match -S > --subsystem-nomatch > + -a --attr-match -A --attr-nomatch -p --property-match > + -g --tag-match -y --sysname-match --name-match -b > --parent-match' > +diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm > +index 8a10237e3d66..63df8b7c9ecc 100644 > +--- a/shell-completion/zsh/_udevadm > ++++ b/shell-completion/zsh/_udevadm > +@@ -30,7 +30,9 @@ > + '--property-match=[Trigger events for devices with a matching > property value.]' \ > + '--tag-match=property[Trigger events for devices with a matching > tag.]' \ > + '--sysname-match=[Trigger events for devices with a matching sys > device name.]' \ > +- '--parent-match=[Trigger events for all children of a given > device.]' > ++ '--parent-match=[Trigger events for all children of a given > device.]' \ > ++ '--initialized-match[Trigger events for devices that are already > initialized.]' \ > ++ '--initialized-nomatch[Trigger events for devices that are not > initialized yet.]' > + } > + > + (( $+functions[_udevadm_settle] )) || > +diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c > +index e4b3150e6039..56921e2cc62e 100644 > +--- a/src/udev/udevadm-trigger.c > ++++ b/src/udev/udevadm-trigger.c > +@@ -10,6 +10,7 @@ > + #include "device-private.h" > + #include "fd-util.h" > + #include "fileio.h" > ++#include "parse-util.h" > + #include "path-util.h" > + #include "process-util.h" > + #include "set.h" > +@@ -130,6 +131,8 @@ > + " -y --sysname-match=NAME Trigger devices with > this /sys path\n" > + " --name-match=NAME Trigger devices with > this /dev name\n" > + " -b --parent-match=NAME Trigger devices with > that parent device\n" > ++ " --initialized-match Trigger devices that > are already initialized\n" > ++ " --initialized-nomatch Trigger devices that > are not initialized yet\n" > + " -w --settle Wait for the triggered > events to complete\n" > + " --wait-daemon[=SECONDS] Wait for udevd daemon > to be initialized\n" > + " before triggering > uevents\n" > +@@ -142,6 +145,8 @@ > + enum { > + ARG_NAME = 0x100, > + ARG_PING, > ++ ARG_INITIALIZED_MATCH, > ++ ARG_INITIALIZED_NOMATCH, > + }; > + > + static const struct option options[] = { > +@@ -158,6 +163,8 @@ > + { "sysname-match", required_argument, NULL, 'y' }, > + { "name-match", required_argument, NULL, ARG_NAME }, > + { "parent-match", required_argument, NULL, 'b' }, > ++ { "initialized-match", no_argument, NULL, > ARG_INITIALIZED_MATCH }, > ++ { "initialized-nomatch", no_argument, NULL, > ARG_INITIALIZED_NOMATCH }, > + { "settle", no_argument, NULL, 'w' }, > + { "wait-daemon", optional_argument, NULL, ARG_PING }, > + { "version", no_argument, NULL, 'V' }, > +@@ -301,7 +308,12 @@ > + } > + break; > + } > +- > ++ case ARG_INITIALIZED_MATCH: > ++ case ARG_INITIALIZED_NOMATCH: > ++ r = device_enumerator_add_match_is_initialized(e, c > == ARG_INITIALIZED_MATCH ? MATCH_INITIALIZED_YES : MATCH_INITIALIZED_NO); > ++ if (r < 0) > ++ return log_error_errno(r, "Failed to set > initialized filter: %m"); > ++ break; > + case 'V': > + return print_version(); > + case 'h': > diff --git a/meta/recipes-core/systemd/systemd_244.5.bb > b/meta/recipes-core/systemd/systemd_244.5.bb > index bd66d82932..a398043308 100644 > --- a/meta/recipes-core/systemd/systemd_244.5.bb > +++ b/meta/recipes-core/systemd/systemd_244.5.bb > @@ -39,6 +39,7 @@ SRC_URI += "file://touchscreen.rules \ > file://CVE-2023-26604-2.patch \ > file://CVE-2023-26604-3.patch \ > file://CVE-2023-26604-4.patch \ > + > file://0001-udevadm-trigger-implement-initialized-match-nomatch-arguments.patch > \ > " > > # patches needed by musl > -- > 2.38.1 > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#182513): https://lists.openembedded.org/g/openembedded-core/message/182513 Mute This Topic: https://lists.openembedded.org/mt/99410378/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
