@@ -742,6 +742,28 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
742
742
return 0 ;
743
743
}
744
744
745
+ static char * prepare_command_line (void )
746
+ {
747
+ #ifdef CONFIG_CMDLINE_BOOL
748
+ #ifdef CONFIG_CMDLINE_OVERRIDE
749
+ strlcpy (boot_command_line , builtin_cmdline , COMMAND_LINE_SIZE );
750
+ #else
751
+ if (builtin_cmdline [0 ]) {
752
+ /* append boot loader cmdline to builtin */
753
+ strlcat (builtin_cmdline , " " , COMMAND_LINE_SIZE );
754
+ strlcat (builtin_cmdline , boot_command_line , COMMAND_LINE_SIZE );
755
+ strlcpy (boot_command_line , builtin_cmdline , COMMAND_LINE_SIZE );
756
+ }
757
+ #endif
758
+ #endif
759
+
760
+ strlcpy (command_line , boot_command_line , COMMAND_LINE_SIZE );
761
+
762
+ parse_early_param ();
763
+
764
+ return command_line ;
765
+ }
766
+
745
767
/*
746
768
* Determine if we were loaded by an EFI loader. If so, then we have also been
747
769
* passed the efi memmap, systab, etc., so we should use these data structures
@@ -830,6 +852,23 @@ void __init setup_arch(char **cmdline_p)
830
852
831
853
x86_init .oem .arch_setup ();
832
854
855
+ /*
856
+ * x86_configure_nx() is called before parse_early_param() (called by
857
+ * prepare_command_line()) to detect whether hardware doesn't support
858
+ * NX (so that the early EHCI debug console setup can safely call
859
+ * set_fixmap()). It may then be called again from within noexec_setup()
860
+ * during parsing early parameters to honor the respective command line
861
+ * option.
862
+ */
863
+ x86_configure_nx ();
864
+
865
+ /*
866
+ * This parses early params and it needs to run before
867
+ * early_reserve_memory() because latter relies on such settings
868
+ * supplied as early params.
869
+ */
870
+ * cmdline_p = prepare_command_line ();
871
+
833
872
/*
834
873
* Do some memory reservations *before* memory is added to memblock, so
835
874
* memblock allocations won't overwrite it.
@@ -863,33 +902,6 @@ void __init setup_arch(char **cmdline_p)
863
902
bss_resource .start = __pa_symbol (__bss_start );
864
903
bss_resource .end = __pa_symbol (__bss_stop )- 1 ;
865
904
866
- #ifdef CONFIG_CMDLINE_BOOL
867
- #ifdef CONFIG_CMDLINE_OVERRIDE
868
- strlcpy (boot_command_line , builtin_cmdline , COMMAND_LINE_SIZE );
869
- #else
870
- if (builtin_cmdline [0 ]) {
871
- /* append boot loader cmdline to builtin */
872
- strlcat (builtin_cmdline , " " , COMMAND_LINE_SIZE );
873
- strlcat (builtin_cmdline , boot_command_line , COMMAND_LINE_SIZE );
874
- strlcpy (boot_command_line , builtin_cmdline , COMMAND_LINE_SIZE );
875
- }
876
- #endif
877
- #endif
878
-
879
- strlcpy (command_line , boot_command_line , COMMAND_LINE_SIZE );
880
- * cmdline_p = command_line ;
881
-
882
- /*
883
- * x86_configure_nx() is called before parse_early_param() to detect
884
- * whether hardware doesn't support NX (so that the early EHCI debug
885
- * console setup can safely call set_fixmap()). It may then be called
886
- * again from within noexec_setup() during parsing early parameters
887
- * to honor the respective command line option.
888
- */
889
- x86_configure_nx ();
890
-
891
- parse_early_param ();
892
-
893
905
#ifdef CONFIG_MEMORY_HOTPLUG
894
906
/*
895
907
* Memory used by the kernel cannot be hot-removed because Linux
0 commit comments