Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ffb6017563aa15f9a8cff9a30b861d42c2695894
Commit:     ffb6017563aa15f9a8cff9a30b861d42c2695894
Parent:     9a11ff68273f440b1d33fcc4d550ffc881e6a0b4
Author:     Zachary Amsden <[EMAIL PROTECTED]>
AuthorDate: Tue Feb 13 13:26:24 2007 +0100
Committer:  Andi Kleen <[EMAIL PROTECTED]>
CommitDate: Tue Feb 13 13:26:24 2007 +0100

    [PATCH] x86-64: x86_64 - Fix FS/GS registers for VT execution
    
    Initialize FS and GS to __KERNEL_DS as well.  The actual value of them is 
not
    important, but it is important to reload them in protected mode.  At this 
time,
    they still retain the real mode values from initial boot.  VT disallows
    execution of code under such conditions, which means hardware virtualization
    can not be used to boot the kernel on Intel platforms, making the boot time
    painfully slow.
    
    This requires moving the GS load before the load of GS_BASE, so just move
    all the segments loads there to keep them together in the code.
    
    Signed-off-by: Zachary Amsden <[EMAIL PROTECTED]>
    Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
---
 arch/x86_64/kernel/head.S |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S
index 1e6f808..598a4d0 100644
--- a/arch/x86_64/kernel/head.S
+++ b/arch/x86_64/kernel/head.S
@@ -163,6 +163,20 @@ startup_64:
         */
        lgdt    cpu_gdt_descr
 
+       /* set up data segments. actually 0 would do too */
+       movl $__KERNEL_DS,%eax
+       movl %eax,%ds
+       movl %eax,%ss
+       movl %eax,%es
+
+       /*
+        * We don't really need to load %fs or %gs, but load them anyway
+        * to kill any stale realmode selectors.  This allows execution
+        * under VT hardware.
+        */
+       movl %eax,%fs
+       movl %eax,%gs
+
        /* 
         * Setup up a dummy PDA. this is just for some early bootup code
         * that does in_interrupt() 
@@ -173,12 +187,6 @@ startup_64:
        shrq    $32,%rdx
        wrmsr   
 
-       /* set up data segments. actually 0 would do too */
-       movl $__KERNEL_DS,%eax
-       movl %eax,%ds   
-       movl %eax,%ss
-       movl %eax,%es
-                       
        /* esi is pointer to real mode structure with interesting info.
           pass it to C */
        movl    %esi, %edi
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to