diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
index 848f5ec443..40a2321860 100644
--- a/man/kernel-command-line.xml
+++ b/man/kernel-command-line.xml
@@ -393,6 +393,17 @@
+
+ systemd.cpu_affinity=
+
+
+ Overrides the CPU affinity mask for the service manager and the default for all child
+ processes it forks. This takes precedence over CPUAffinity=, see
+ systemd-system.conf5
+ for details.
+
+
+
modules_load=
rd.modules_load=
diff --git a/src/core/main.c b/src/core/main.c
index c24b696b16..b0a55f8cb8 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -475,6 +475,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, "Faile 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))