<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><br>And another confusing:<br><br>In uncompressed code,<br><br>================<br> arch/x86/boot/compressed/head_32.S:<br><br>ENTRY(startup_32)<br>...<br>&nbsp;&nbsp;&nbsp; testb&nbsp;&nbsp; $(1&lt;&lt;6), BP_loadflags(%esi)<br>&nbsp;&nbsp;&nbsp; jnz 1f<br><br>&nbsp;&nbsp;&nbsp; cli<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; $__BOOT_DS, %eax<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; %eax, %ds<br>&nbsp;&nbsp;&nbsp; movl&nbsp;&nbsp;&nbsp; %eax, %es<br>&nbsp;&nbsp; ...<br>===============<br><br>Kernel already set these segment resisters.<br><div></div><div id="divNeteaseMailCard"></div><br>At 2013-05-02 16:14:23,Jacky&nbsp;&lt;jackyclivia@163.com&gt; wrote:<br> <blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial">Hi, All,<br><br>Why kernel reloads these segment registers in startup_32 again ? Just liking the following:<br><br>=======================<br>ENTRY(startup_32)<br>&nbsp;&nbsp;&nbsp; movl pa(stack_start),%ecx<br><br>&nbsp;&nbsp;&nbsp; /* test KEEP_SEGMENTS flag to see if the bootloader is asking<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; us to not reload segments */<br>&nbsp;&nbsp;&nbsp; testb $(1&lt;&lt;6), BP_loadflags(%esi)<br>&nbsp;&nbsp;&nbsp; jnz 2f<br><br>/*<br>&nbsp;* Set segments to known values.<br>&nbsp;*/<br>&nbsp;&nbsp;&nbsp; lgdt pa(boot_gdt_descr)<br>&nbsp;&nbsp;&nbsp; movl $(__BOOT_DS),%eax<br>&nbsp;&nbsp;&nbsp; movl %eax,%ds<br>&nbsp;&nbsp;&nbsp; ...<br>======================<br><br>Considering bootloader, such as GRUB has already load these segments, so why kernel reloads them again while wasting CPU ?<br><br>Thanks,<br>Jacky<br><br><br></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span></blockquote></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>