lkml.org 
[lkml]   [2014]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [PATCH] earlyprintk: re-enable earlyprintk calling early_param


On Fri, 29 Aug 2014, Stephen Warren wrote:

> On 08/28/2014 11:28 PM, Sahara wrote:
>>
>>
>> On Wed, 27 Aug 2014, Thierry Reding wrote:
>>
>>> On Thu, Aug 14, 2014 at 07:13:36PM +0900, kpark3469@gmail.com wrote:
>>>> From: Sahara <keun-o.park@windriver.com>
>>>>
>>>> Although there are many obs_kernel_param and its names are
>>>> earlyprintk and also EARLY_PRINTK is also enabled, we could not
>>>> see the early_printk output properly until now. This patch
>>>> considers earlycon as well as earlyprintk.
>>>>
>>>> Signed-off-by: Sahara <keun-o.park@windriver.com>
>>>> ---
>>>> init/main.c | 3 ++-
>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/init/main.c b/init/main.c
>>>> index bb1aed9..235d248 100644
>>>> --- a/init/main.c
>>>> +++ b/init/main.c
>>>> @@ -426,7 +426,8 @@ static int __init do_early_param(char *param, char
>> *val, const char *unused)
>>>> for (p = __setup_start; p < __setup_end; p++) {
>>>> if ((p->early && parameq(param, p->str)) ||
>>>> (strcmp(param, "console") == 0 &&
>>>> - strcmp(p->str, "earlycon") == 0)
>>>> + ((strcmp(p->str, "earlycon") == 0) ||
>>>> + (strcmp(p->str, "earlyprintk") == 0)))
>>>> ) {
>>>> if (p->setup_func(val) != 0)
>>>> pr_warn("Malformed early option '%s'\n",
>> param);
>>>
>>> It seems like this patch causes the following warning for me during
>>> boot:
>>>
>>> [ 0.000000] Booting Linux on physical CPU 0x0
>>> [ 0.000000] Initializing cgroup subsys cpu
>>> [ 0.000000] Initializing cgroup subsys cpuacct
>>> [ 0.000000] Linux version 3.17.0-rc2-next-20140827
>> (thierry.reding@ulmo) (gcc version 4.9.0 (GCC) ) #18 SMP PREEMPT Wed Aug
>> 27 17:08:12 CEST 2014
>>> [ 0.000000] CPU: ARMv7 Processor [413fc0f3] revision 3 (ARMv7),
>> cr=10c5387d
>>> [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction
>> cache
>>> [ 0.000000] Machine model: NVIDIA Tegra124 Jetson TK1
>>> [ 0.000000] bootconsole [earlycon0] enabled
>>> [ 0.000000] debug: ignoring loglevel setting.
>>> [ 0.000000] ------------[ cut here ]------------
>>> [ 0.000000] WARNING: CPU: 0 PID: 0 at
>> /home/thierry.reding/src/kernel/linux-work.git/kernel/printk/printk.c:2402
>> register_console+0x60/0x37c()
>>> [ 0.000000] console 'earlycon0' already registered
>>> [ 0.000000] Modules linked in:
>>> [ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted
>> 3.17.0-rc2-next-20140827 #18
>>> [ 0.000000] [<c0015fec>] (unwind_backtrace) from [<c0011aac>]
>> (show_stack+0x10/0x14)
>>> [ 0.000000] [<c0011aac>] (show_stack) from [<c062b700>]
>> (dump_stack+0x98/0xd8)
>>> [ 0.000000] [<c062b700>] (dump_stack) from [<c0025ba0>]
>> (warn_slowpath_common+0x70/0x8c)
>>> [ 0.000000] [<c0025ba0>] (warn_slowpath_common) from [<c0025bec>]
>> (warn_slowpath_fmt+0x30/0x40)
>>> [ 0.000000] [<c0025bec>] (warn_slowpath_fmt) from [<c00639b8>]
>> (register_console+0x60/0x37c)
>>> [ 0.000000] [<c00639b8>] (register_console) from [<c0883870>]
>> (setup_early_printk+0x20/0x28)
>>> [ 0.000000] [<c0883870>] (setup_early_printk) from [<c087f43c>]
>> (do_early_param+0x6c/0xd0)
>>> [ 0.000000] [<c087f43c>] (do_early_param) from [<c003cba0>]
>> (parse_args+0x238/0x3d0)
>>> [ 0.000000] [<c003cba0>] (parse_args) from [<c087f814>]
>> (parse_early_options+0x38/0x40)
>>> [ 0.000000] [<c087f814>] (parse_early_options) from [<c087f84c>]
>> (parse_early_param+0x30/0x40)
>>> [ 0.000000] [<c087f84c>] (parse_early_param) from [<c088206c>]
>> (setup_arch+0x4b4/0x974)
>>> [ 0.000000] [<c088206c>] (setup_arch) from [<c087f8f8>]
>> (start_kernel+0x98/0x3a8)
>>> [ 0.000000] [<c087f8f8>] (start_kernel) from [<80008074>]
>> (0x80008074)
>>> [ 0.000000] ---[ end trace cb88537fdc8fa200 ]---
>>> [ 0.000000] cma: Reserved 128 MiB at a7800000
>>> [ 0.000000] Memory policy: Data cache writealloc
>>> [ 0.000000] On node 0 totalpages: 524032
>>> [ 0.000000] free_area_init_node: node 0, pgdat c091cc00, node_mem_map
>> e67b7000
>>> [ 0.000000] Normal zone: 1520 pages used for memmap
>>> [ 0.000000] Normal zone: 0 pages reserved
>>> [ 0.000000] Normal zone: 194560 pages, LIFO batch:31
>>> [ 0.000000] HighMem zone: 2574 pages used for memmap
>>> [ 0.000000] HighMem zone: 329472 pages, LIFO batch:31
>>> [ 0.000000] PERCPU: Embedded 8 pages/cpu @e6767000 s8832 r8192 d15744
>> u32768
>>> [ 0.000000] pcpu-alloc: s8832 r8192 d15744 u32768 alloc=8*4096
>>> [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3
>>> [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on.
>> Total pages: 522512
>>> [ 0.000000] Kernel command line: console=ttyS0,115200n8
>> ignore_loglevel rootwait ro earlyprintk ip=:::::eth0:dhcp root=/dev/nfs
>> nfsroot=192.168.69.100:/srv/nfs/tegra124 drm.debug=0xf cma=128M
>>>
>>> Reverting the patch eliminates the warning. earlyprintk does work fine
>>> for me without this patch.
>>>
>>> Thierry
>>
>>
>> This warning message is caused by specifying 'earlyprintk' in
>> your command line args. Same problem may happen if you specify 'earlycon'
>> in your command line args and enable CONFIG_SERIAL_EARLYCON with
>> the current code without this patch. I think it's appropriate result
>> letting a developer know that both ways of using earlyprintk are enabled.
>> With current code, although a developer enables CONFIG_EARLY_PRINTK and
>> has "console=" arg in command line args, he/she should specify the
>> 'earlyprintk' in command line args also to see early_printk() outputs.
>> With this patch, simply enabling CONFIG_EARLY_PRINTK and having 'console='
>> line make you be able to the early_printk().
>>
>> Nonetheless I want to retract this patch. It's good for ARM, but not good
>> for other architectures such as x86. And, because CONFIG_EARLY_PRINTK is
>> depending on DEBUG_LL in ARM, making a relation with "console=" is absurd.
>> (see strcmp(param, "console") == 0 && strcmp(p->str, "earlyprintk") == 0)
>
> Even on ARM, this patch feels like the wrong thing. After all, I can build a
> DEBUG_LL enabled multi-platform kernel, and boot it on a bunch of different
> SoCs. However, earlyprintk will only work on one (or zero) of those SoCs, and
> hence shouldn't automatically enable itself; specifically requesting
> activation using the earlyprintk kernel command-line parameter is the correct
> approach.
>

So you are saying, because DEBUG_LL didn't work on several SoCs, using the
earlyprintk in command line args is the correct approach?
You are misunderstanding how it works. On ARM with enabling multi-platform
kernel, you should choose a specific low-level debug port for DEBUG_LL.
For example, if you have OMAP ZOOM3, you should select
CONFIG_DEBUG_ZOOM_UART from menu.
If you chose a right port for your SoCs and if it didn't work properly,
that means its port code should be fixed. (Please report it.)
All the code for low-level debugging is located at arch/arm/include/debug.

- Sahara


\
 
 \ /
  Last update: 2014-09-01 05:01    [W:0.260 / U:0.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site