--- /dev/null
+From fbe6183998546f8896ee0b620ece86deff5a2fd1 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <bp@suse.de>
+Date: Mon, 13 Dec 2021 12:27:56 +0100
+Subject: Revert "x86/boot: Pull up cmdline preparation and early param parsing"
+
+From: Borislav Petkov <bp@suse.de>
+
+commit fbe6183998546f8896ee0b620ece86deff5a2fd1 upstream.
+
+This reverts commit 8d48bf8206f77aa8687f0e241e901e5197e52423.
+
+It turned out to be a bad idea as it broke supplying mem= cmdline
+parameters due to parse_memopt() requiring preparatory work like setting
+up the e820 table in e820__memory_setup() in order to be able to exclude
+the range specified by mem=.
+
+Pulling that up would've broken Xen PV again, see threads at
+
+ https://lkml.kernel.org/r/20210920120421.29276-1-jgross@suse.com
+
+due to xen_memory_setup() needing the first reservations in
+early_reserve_memory() - kernel and initrd - to have happened already.
+
+This could be fixed again by having Xen do those reservations itself...
+
+Long story short, revert this and do a simpler fix in a later patch.
+
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/20211213112757.2612-3-bp@alien8.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/kernel/setup.c | 66 +++++++++++++++++++-----------------------------
+ 1 file changed, 27 insertions(+), 39 deletions(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -742,28 +742,6 @@ dump_kernel_offset(struct notifier_block
+ return 0;
+ }
+
+-static char *prepare_command_line(void)
+-{
+-#ifdef CONFIG_CMDLINE_BOOL
+-#ifdef CONFIG_CMDLINE_OVERRIDE
+- strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
+-#else
+- if (builtin_cmdline[0]) {
+- /* append boot loader cmdline to builtin */
+- strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
+- strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
+- strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
+- }
+-#endif
+-#endif
+-
+- strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
+-
+- parse_early_param();
+-
+- return command_line;
+-}
+-
+ /*
+ * Determine if we were loaded by an EFI loader. If so, then we have also been
+ * passed the efi memmap, systab, etc., so we should use these data structures
+@@ -853,23 +831,6 @@ void __init setup_arch(char **cmdline_p)
+ x86_init.oem.arch_setup();
+
+ /*
+- * x86_configure_nx() is called before parse_early_param() (called by
+- * prepare_command_line()) to detect whether hardware doesn't support
+- * NX (so that the early EHCI debug console setup can safely call
+- * set_fixmap()). It may then be called again from within noexec_setup()
+- * during parsing early parameters to honor the respective command line
+- * option.
+- */
+- x86_configure_nx();
+-
+- /*
+- * This parses early params and it needs to run before
+- * early_reserve_memory() because latter relies on such settings
+- * supplied as early params.
+- */
+- *cmdline_p = prepare_command_line();
+-
+- /*
+ * Do some memory reservations *before* memory is added to memblock, so
+ * memblock allocations won't overwrite it.
+ *
+@@ -902,6 +863,33 @@ void __init setup_arch(char **cmdline_p)
+ bss_resource.start = __pa_symbol(__bss_start);
+ bss_resource.end = __pa_symbol(__bss_stop)-1;
+
++#ifdef CONFIG_CMDLINE_BOOL
++#ifdef CONFIG_CMDLINE_OVERRIDE
++ strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
++#else
++ if (builtin_cmdline[0]) {
++ /* append boot loader cmdline to builtin */
++ strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
++ strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
++ strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
++ }
++#endif
++#endif
++
++ strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
++ *cmdline_p = command_line;
++
++ /*
++ * x86_configure_nx() is called before parse_early_param() to detect
++ * whether hardware doesn't support NX (so that the early EHCI debug
++ * console setup can safely call set_fixmap()). It may then be called
++ * again from within noexec_setup() during parsing early parameters
++ * to honor the respective command line option.
++ */
++ x86_configure_nx();
++
++ parse_early_param();
++
+ #ifdef CONFIG_MEMORY_HOTPLUG
+ /*
+ * Memory used by the kernel cannot be hot-removed because Linux
--- /dev/null
+From 2f5b3514c33fecad4003ce0f22ca9691492d310b Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <rppt@kernel.org>
+Date: Mon, 13 Dec 2021 12:27:57 +0100
+Subject: x86/boot: Move EFI range reservation after cmdline parsing
+
+From: Mike Rapoport <rppt@kernel.org>
+
+commit 2f5b3514c33fecad4003ce0f22ca9691492d310b upstream.
+
+The memory reservation in arch/x86/platform/efi/efi.c depends on at
+least two command line parameters. Put it back later in the boot process
+and move efi_memblock_x86_reserve_range() out of early_memory_reserve().
+
+An attempt to fix this was done in
+
+ 8d48bf8206f7 ("x86/boot: Pull up cmdline preparation and early param parsing")
+
+but that caused other troubles so it got reverted.
+
+The bug this is addressing is:
+
+Dan reports that Anjaneya Chagam can no longer use the efi=nosoftreserve
+kernel command line parameter to suppress "soft reservation" behavior.
+
+This is due to the fact that the following call-chain happens at boot:
+
+ early_reserve_memory
+ |-> efi_memblock_x86_reserve_range
+ |-> efi_fake_memmap_early
+
+which does
+
+ if (!efi_soft_reserve_enabled())
+ return;
+
+and that would have set EFI_MEM_NO_SOFT_RESERVE after having parsed
+"nosoftreserve".
+
+However, parse_early_param() gets called *after* it, leading to the boot
+cmdline not being taken into account.
+
+See also https://lore.kernel.org/r/e8dd8993c38702ee6dd73b3c11f158617e665607.camel@intel.com
+
+ [ bp: Turn into a proper patch. ]
+
+Signed-off-by: Mike Rapoport <rppt@kernel.org>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/20211213112757.2612-4-bp@alien8.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/kernel/setup.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -713,9 +713,6 @@ static void __init early_reserve_memory(
+
+ early_reserve_initrd();
+
+- if (efi_enabled(EFI_BOOT))
+- efi_memblock_x86_reserve_range();
+-
+ memblock_x86_reserve_range_setup_data();
+
+ reserve_ibft_region();
+@@ -890,6 +887,9 @@ void __init setup_arch(char **cmdline_p)
+
+ parse_early_param();
+
++ if (efi_enabled(EFI_BOOT))
++ efi_memblock_x86_reserve_range();
++
+ #ifdef CONFIG_MEMORY_HOTPLUG
+ /*
+ * Memory used by the kernel cannot be hot-removed because Linux