[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] x86/64 fixes.



ChangeSet 1.1441, 2005/05/18 08:52:45+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        x86/64 fixes.
        Signed-off-by: Jun Nakajima <jun.nakajima@xxxxxxxxx>
        Signed-off-by: Scott Parish <srparish@xxxxxxxxxx>
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/x86/x86_64/entry.S          |    4 ++--
 include/asm-x86/x86_64/current.h |   10 ++++++----
 2 files changed, 8 insertions(+), 6 deletions(-)


diff -Nru a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S       2005-05-18 04:08:34 -04:00
+++ b/xen/arch/x86/x86_64/entry.S       2005-05-18 04:08:34 -04:00
@@ -314,10 +314,10 @@
         movq  EDOMAIN_vcpu_info(%rbx),%rax
         pushq VCPUINFO_upcall_mask(%rax)
         testb $TBF_INTERRUPT,%cl
-        setnz VCPUINFO_upcall_mask(%eax)# TBF_INTERRUPT -> clear upcall mask
+        setnz VCPUINFO_upcall_mask(%rax)# TBF_INTERRUPT -> clear upcall mask
         popq  %rax
         shll  $16,%eax                  # Bits 16-23: saved_upcall_mask
-        movw  UREGS_cs+8(%esp),%ax      # Bits  0-15: CS
+        movw  UREGS_cs+8(%rsp),%ax      # Bits  0-15: CS
 FLT5:   movq  %rax,8(%rsi)              # CS/saved_upcall_mask
         movq  UREGS_rip+8(%rsp),%rax
 FLT6:   movq  %rax,(%rsi)               # RIP
diff -Nru a/xen/include/asm-x86/x86_64/current.h 
b/xen/include/asm-x86/x86_64/current.h
--- a/xen/include/asm-x86/x86_64/current.h      2005-05-18 04:08:34 -04:00
+++ b/xen/include/asm-x86/x86_64/current.h      2005-05-18 04:08:34 -04:00
@@ -5,7 +5,7 @@
 struct domain;
 
 #define STACK_RESERVED \
-    (sizeof(struct cpu_user_regs) + sizeof(struct domain *))
+    (sizeof(struct cpu_user_regs) + sizeof(struct domain *) + 8)
 
 static inline struct exec_domain *get_current(void)
 {
@@ -34,15 +34,17 @@
 
 /*
  * Get the bottom-of-stack, as stored in the per-CPU TSS. This is actually
- * 40 bytes before the real bottom of the stack to allow space for:
- *  domain pointer, DS, ES, FS, GS
+ * 48 bytes before the real bottom of the stack to allow space for:
+ * domain pointer, padding, DS, ES, FS, GS. The padding is required to
+ * have the stack pointer 16-byte aligned: the amount we subtract from
+ * STACK_SIZE *must* be a multiple of 16.
  */
 static inline unsigned long get_stack_bottom(void)
 {
     unsigned long p;
     __asm__( "andq %%rsp,%0; addq %2,%0"
            : "=r" (p)
-           : "0" (~(STACK_SIZE-1)), "i" (STACK_SIZE-40) );
+           : "0" (~(STACK_SIZE-1)), "i" (STACK_SIZE-48) );
     return p;
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.