<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Batang;
        panose-1:2 3 6 0 0 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:"Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:Batang;
        panose-1:2 3 6 0 0 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        text-autospace:none;
        word-break:break-hangul;
        font-size:10.0pt;
        font-family:"Malgun Gothic";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Malgun Gothic";
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Malgun Gothic";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:3.0cm 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=KO link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Hi, I’ve forgotten about this question.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Recently I found that the reason printk in the next line seemed to have started when the program is stuck during the first printk processing was because there was an exception and the exception handler also calls printk. I thought the printk was coming from the next printk in start_kernel( ) but it was from data abort exception handler.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>The data abort exception occurred because in armv8, when the address is not aligned for a device region, the mmu faults. (I set non-cacheable for the 8MB memory region just to see the value I wrote in memory using ocd, but this made the mmu think that region is a device region because it’s non-cacheable.  The first printk was calling memcpy for byte stream and it was not word aligned, because it’s just byte stream) So I reverted the memory attribute to normal and used __flush_dcache_area to see the data I wrote in memory.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Hope this helps anyone.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Thanks!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Chan Kim<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal align=left style='text-align:left;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all'><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Chan Kim <ckim@etri.re.kr> <br><b>Sent:</b> Thursday, February 17, 2022 4:26 PM<br><b>To:</b> kernelnewbies@kernelnewbies.org<br><b>Subject:</b> weird printk operation early at start_kernel..<o:p></o:p></span></p></div></div><p class=MsoNormal align=left style='text-align:left'><span lang=EN-US><o:p> </o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>Hello all,<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'><o:p> </o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>I</span><span style='font-family:"Malgun Gothic"'>’<span lang=EN-US>m debugging linux boot on an FPGA board (with limited RAM size, only 8MB SRAM in place of DDR3 memory).<o:p></o:p></span></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>I</span><span style='font-family:"Malgun Gothic"'>’<span lang=EN-US>m using linux 5.4.21 for now and because the printk doesn</span>’<span lang=EN-US>t work yet, I</span>’<span lang=EN-US>m writing some info on memory to see how it</span>’<span lang=EN-US>s doing.<o:p></o:p></span></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>After it goes into start_kernel, it calls smp_setup_processor_id(); and inside it, it calls pr_info which is just printk.<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>==== init/main.c<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>uint64_t mydebug2[64] = {0,};<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>uint32_t myidx = 0;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>uint64_t mycnt = 0; // for left shift, 64bit<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>asmlinkage __visible void __init start_kernel(void)<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>{<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    char *command_line;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    char *after_dashes;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    uint64_t el;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>set_task_stack_end_magic(&init_task);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1000;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    smp_setup_processor_id();<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x2000;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>==== arch/arm64/kernel/setup.c<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>void __init smp_setup_processor_id(void)<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>{<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    cpu_logical_map(0) = mpidr;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    /*<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     * clear __my_cpu_offset on boot CPU to avoid hang caused by<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     * using percpu variable early, for example, lockdep will<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     * access percpu variable inside lock_release<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     */<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    set_my_cpu_offset(0);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1100;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    pr_info("test message\n"); // just printk<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1200;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    pr_info("Booting Linux on physical CPU 0x%010lx [0x%08x]\n", // printk<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        (unsigned long)mpidr, read_cpuid_id());<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>}<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>==== kernel/printk/printk.c<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>asmlinkage __visible int printk(const char *fmt, ...)<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>{<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    va_list args;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    int r;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    va_start(args, fmt);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    //why.. read_pkcontext(0x32);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1110;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    r = vprintk_func(fmt, args);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1120;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    va_end(args);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    return r; <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>}<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>==== kernel/printk/printk_safe.c<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>__printf(1, 0) int vprintk_func(const char *fmt, va_list args)<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>{<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    /* <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     * Try to use the main logbuf even in NMI. But avoid calling console<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     * drivers that might have their own locks.<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>     */<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1111;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    if ((this_cpu_read(printk_context) & PRINTK_NMI_DIRECT_CONTEXT_MASK) &&<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>       raw_spin_trylock(&logbuf_lock)) {<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1112;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        int len;    <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        len = vprintk_store(0, LOGLEVEL_DEFAULT, NULL, 0, fmt, args);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        raw_spin_unlock(&logbuf_lock);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        defer_console_output();<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        return len;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    }   <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1113;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    /* Use extra buffer in NMI when logbuf_lock is taken or in safe mode. */<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    if (this_cpu_read(printk_context) & PRINTK_NMI_CONTEXT_MASK) {<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1114;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        return vprintk_nmi(fmt, args);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    }<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    //write_pkcontext();   <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    /* Use extra buffer to prevent a recursion deadlock in safe mode. */<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1115;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    if (this_cpu_read(printk_context) & PRINTK_SAFE_CONTEXT_MASK) {<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1116;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>        return vprintk_safe(fmt, args);<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    }<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    /* No obstacles. */ <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    mydebug2[(myidx++)&63] = (mycnt++ << 32) + 0x1117;<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>    return vprintk_default(fmt, args); <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>}<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>When I examine mydebug2 data, it is like this. (the physical address of mydebug2 is 0x80622000 and I can read the value in memory using ocd,<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>The LSB 32 bits are displayed first here. The memory is set non-cacheable for this test.)<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>0x80622000: 00001000 00000000 00001100 00000001 00001110 00000002 00001111 00000003<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>0x80622020: 00001113 00000004 00001115 00000005 00001117 00000006 00001110 00000007<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>0x80622040: 00001111 00000008 00001113 00000009 00001115 0000000a 00001116 0000000b<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>0x80622060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US> <o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>As you can see, in the vprintk_safe function, it goes into vprintk_default and then without 0x1120 being written, printk is called again and this time it goes into vprintk_nmi and seems to hang (waiting for console lock I remember..).<o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt'><span lang=EN-US style='font-family:"Malgun Gothic"'>Could anyone give me some light on what</span><span style='font-family:"Malgun Gothic"'>’<span lang=EN-US>s going on here? (Actual print to serial port is supposed to come out much later inside setup_arch).<o:p></o:p></span></span></p><p class=MsoNormal><span lang=EN-US>Any comment will be very much appreciated.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Thank you!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Chan Kim<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></div></body></html>