[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <3d0a8b229544ef879d05fee74849619d@ispras.ru>
Date: Wed, 04 May 2022 23:40:26 +0300
From: baskov@...ras.ru
To: Borislav Petkov <bp@...en8.de>
Cc: Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
Dave Hansen <dave.hansen@...ux.intel.com>, x86@...nel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] x86: Parse CONFIG_CMDLINE in compressed kernel
On 2022-05-04 11:59, Borislav Petkov wrote:
> On Thu, Apr 07, 2022 at 05:40:14AM +0300, Baskov Evgeniy wrote:
>> CONFIG_CMDLINE_BOOL and CONFIG_CMDLINE_OVERRIDE was ignored
>> during options lookup in compressed kernel, including
>> earlyprintk option, so it was impossible to get earlyprintk
>> messages from that stage of boot process via command line
>> provided at compile time. Being able to enable earlyprintk
>> via compile-time option might be desirable for booting
>> on systems with broken UEFI command line arguments via EFISTUB.
>>
>> Parse CONFIG_CMDLINE-related options correctly in compressed
>> kernel code.
>>
>> Signed-off-by: Baskov Evgeniy <baskov@...ras.ru>
>>
>> diff --git a/arch/x86/boot/compressed/cmdline.c
>> b/arch/x86/boot/compressed/cmdline.c
>> index f1add5d85da9..dd8cbbe61dff 100644
>> --- a/arch/x86/boot/compressed/cmdline.c
>> +++ b/arch/x86/boot/compressed/cmdline.c
>> @@ -22,9 +22,49 @@ unsigned long get_cmd_line_ptr(void)
>> }
>> int cmdline_find_option(const char *option, char *buffer, int
>> bufsize)
>> {
>> - return __cmdline_find_option(get_cmd_line_ptr(), option, buffer,
>> bufsize);
>> + int len = -1;
>> + unsigned long cmdline_ptr;
>> +
>> + /*
>> + * First try command line string provided by user,
>> + * then try command line string configured at comple time.
>> + * Skip first step if CONFIG_CMDLINE_OVERRIDE is enabled
>> + * and parse only compile time command line.
>> + */
>> +
>> + if (!IS_ENABLED(CONFIG_CMDLINE_OVERRIDE)) {
>> + cmdline_ptr = get_cmd_line_ptr();
>> + len = __cmdline_find_option(cmdline_ptr, option,
>> + buffer, bufsize);
>> + }
>> +
>> +#ifdef CONFIG_CMDLINE_BOOL
>> + if (len < 0) {
>> + cmdline_ptr = (unsigned long)CONFIG_CMDLINE;
>> + len = __cmdline_find_option(cmdline_ptr, option,
>> + buffer, bufsize);
>> + }
>> +#endif
>
> Do I see it correctly that all this logic boils down to returning the
> proper cmdline ptr and so you can do that once in get_cmd_line_ptr()
> instead of duplicating the ifdeffery?
Yes, it can be done by returning either concatenation of build-time
and run-time command line strings or only the build-time one,
depending on the kernel configuration.
Actually, it is implemented this way in arch/x86/kernel/setup.c.
I thought it's better to avoid imposing restrictions on kernel
command line length, but since it is already done, I guess,
I will do the same way in v2.
Thanks,
Baskov Evgeniy
Powered by blists - more mailing lists