summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-11-26 09:46:00 +0100
committerThe Plumber <50238977+systemd-rhel-bot@users.noreply.github.com>2020-04-24 16:05:22 +0200
commitfab8f70326d687479ef63fe177572ab512bf965e (patch)
tree051fba85b16373e95740df848c4e8cef80613602
parent0c0129bd214df25318d267fbbfe2cde6fc18b465 (diff)
downloadsystemd-239-31.tar.gz
pid1: add new kernel cmdline arg systemd.cpu_affinity=v239-31
Let's allow configuration of the CPU affinity via the kernel cmdline, overriding CPUAffinity= in /etc/systemd/system.conf Prompted by: https://lists.freedesktop.org/archives/systemd-devel/2019-November/043754.html (cherry picked from commit 68d58f38693e586b5ce5785274f8e42a79625196) Resolves: #1827621
-rw-r--r--man/kernel-command-line.xml11
-rw-r--r--src/core/main.c9
2 files changed, 20 insertions, 0 deletions
diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
index 0545f9d84b..4d8cb4e50e 100644
--- a/man/kernel-command-line.xml
+++ b/man/kernel-command-line.xml
@@ -367,6 +367,17 @@
</varlistentry>
<varlistentry>
+ <term><varname>systemd.cpu_affinity=</varname></term>
+
+ <listitem>
+ <para>Overrides the CPU affinity mask for the service manager and the default for all child
+ processes it forks. This takes precedence over <varname>CPUAffinity=</varname>, see
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for details.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>modules_load=</varname></term>
<term><varname>rd.modules_load=</varname></term>
diff --git a/src/core/main.c b/src/core/main.c
index 45d09b1e11..9f238a8430 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -472,6 +472,15 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
if (arg_default_timeout_start_usec <= 0)
arg_default_timeout_start_usec = USEC_INFINITY;
+ } else if (proc_cmdline_key_streq(key, "systemd.cpu_affinity")) {
+
+ if (proc_cmdline_value_missing(key, value))
+ return 0;
+
+ r = parse_cpu_set(value, &arg_cpu_affinity);
+ if (r < 0)
+ log_warning_errno(r, "Failed to parse CPU affinity mask '%s', ignoring: %m", value);
+
} else if (proc_cmdline_key_streq(key, "systemd.watchdog_device")) {
if (proc_cmdline_value_missing(key, value))