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
|