# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 5823dbfbb4cd6dd9111a4a4cb2198a0ee3467011
# Parent 136b2d20dc81db51924aee54c8ec4ce6232defa2
Move linear faulting address (%cr2) out of the page fault
stack frame and into vcpu_info_t (in shared_info_t). This
makes the guest #PF handler much more similar to native.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/i386/kernel/entry.S
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/entry.S Wed Nov 9 15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/entry.S Wed Nov 9 16:23:46 2005
@@ -81,7 +81,7 @@
#define evtchn_upcall_pending /* 0 */
#define evtchn_upcall_mask 1
-#define sizeof_vcpu_shift 3
+#define sizeof_vcpu_shift 4
#ifdef CONFIG_SMP
#define preempt_disable(reg) incl TI_preempt_count(reg)
@@ -813,35 +813,9 @@
pushl $do_alignment_check
jmp error_code
-# This handler is special, because it gets an extra value on its stack,
-# which is the linear faulting address.
-# fastcall register usage: %eax = pt_regs, %edx = error code,
-# %ecx = fault address
ENTRY(page_fault)
- pushl %ds
- pushl %eax
- xorl %eax, %eax
- pushl %ebp
- pushl %edi
- pushl %esi
- pushl %edx
- decl %eax /* eax = -1 */
- pushl %ecx
- pushl %ebx
- cld
- pushl %es
-# UNWIND_ESPFIX_STACK
- popl %edi
- movl ES(%esp), %ecx /* get the faulting address */
- movl ORIG_EAX(%esp), %edx /* get the error code */
- movl %eax, ORIG_EAX(%esp)
- movl %edi, ES(%esp)
- movl $(__KERNEL_DS),%eax
- movl %eax, %ds
- movl %eax, %es
- movl %esp,%eax /* pt_regs pointer */
- call do_page_fault
- jmp ret_from_exception
+ pushl $do_page_fault
+ jmp error_code
#ifdef CONFIG_X86_MCE
ENTRY(machine_check)
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/i386/kernel/traps.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/traps.c Wed Nov 9 15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/traps.c Wed Nov 9 16:23:46 2005
@@ -972,7 +972,7 @@
/*
- * NB. All these are "trap gates" (i.e. events_mask isn't cleared) except
+ * NB. All these are "trap gates" (i.e. events_mask isn't set) except
* for those that specify <dpl>|4 in the second field.
*/
static trap_info_t trap_table[] = {
@@ -988,7 +988,7 @@
{ 11, 0, __KERNEL_CS, (unsigned long)segment_not_present },
{ 12, 0, __KERNEL_CS, (unsigned long)stack_segment },
{ 13, 0, __KERNEL_CS, (unsigned long)general_protection },
- { 14, 0, __KERNEL_CS, (unsigned long)page_fault },
+ { 14, 0|4, __KERNEL_CS, (unsigned long)page_fault },
{ 15, 0, __KERNEL_CS, (unsigned long)fixup_4gb_segment },
{ 16, 0, __KERNEL_CS, (unsigned long)coprocessor_error },
{ 17, 0, __KERNEL_CS, (unsigned long)alignment_check },
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c Wed Nov 9 15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/fault.c Wed Nov 9 16:23:46 2005
@@ -279,14 +279,17 @@
* bit 1 == 0 means read, 1 means write
* bit 2 == 0 means kernel, 1 means user-mode
*/
-fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code,
- unsigned long address)
+fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code)
{
struct task_struct *tsk;
struct mm_struct *mm;
struct vm_area_struct * vma;
+ unsigned long address;
int write;
siginfo_t info;
+
+ address = HYPERVISOR_shared_info->vcpu_data[
+ smp_processor_id()].arch.cr2;
/* Set the "privileged fault" bit to something sane. */
error_code &= ~4;
@@ -297,11 +300,10 @@
if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
SIGSEGV) == NOTIFY_STOP)
return;
-#if 0
+
/* It's safe to allow irq's after cr2 has been saved */
- if (regs->eflags & (X86_EFLAGS_IF|VM_MASK))
+ if ((uint8_t)(regs->xcs >> 16) == 0)
local_irq_enable();
-#endif
tsk = current;
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/entry.S
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/entry.S Wed Nov 9
15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/entry.S Wed Nov 9
16:23:46 2005
@@ -874,42 +874,8 @@
ret
CFI_ENDPROC
-
- /*
- * Copy error_entry because of the different stack frame
- */
ENTRY(page_fault)
- movq (%rsp),%rcx
- movq 8(%rsp),%r11
- addq $0x10,%rsp # now %rsp points to %cr2
- pushq %rax
- leaq do_page_fault(%rip),%rax
- cld
- subq $13*8,%rsp
- movq %rdx,12*8(%rsp) # save %rdx
- movq 13*8(%rsp),%rdx # load rax
- movq %rcx,11*8(%rsp)
- movq %rdx,10*8(%rsp) # store rax
- movq %rsi,13*8(%rsp) # now save %rsi
- movq 14*8(%rsp),%rdx # load %cr2, 3rd argument
- movq %r8, 9*8(%rsp)
- movq %r9, 8*8(%rsp)
- movq %r10,7*8(%rsp)
- movq %r11,6*8(%rsp)
- movq %rbx,5*8(%rsp)
- movq %rbp,4*8(%rsp)
- movq %r12,3*8(%rsp)
- movq %r13,2*8(%rsp)
- movq %r14,1*8(%rsp)
- movq %r15,(%rsp)
-#if 0
- cmpl $__KERNEL_CS,CS(%rsp)
- je error_kernelspace
-#endif
- /*
- * 1st and 2nd arguments are set by error_call_handler
- */
- jmp error_call_handler
+ errorentry do_page_fault
ENTRY(coprocessor_error)
zeroentry do_coprocessor_error
@@ -948,24 +914,15 @@
paranoid_exit:
testl %ebx,%ebx /* swapgs needed? */
jnz paranoid_restore
+ testl $3,CS(%rsp)
+ jnz paranoid_userspace
paranoid_swapgs:
-/* swapgs */
+ swapgs
paranoid_restore:
RESTORE_ALL 8
-/* iretq */
+ iretq
paranoid_userspace:
GET_THREAD_INFO(%rcx)
-# movl threadinfo_flags(%rcx),%edx
-# testl $_TIF_NEED_RESCHED,%edx
-# jnz paranoid_resched
-# testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
-# jnz paranoid_signal
-# jmp paranoid_swapgs
-#paranoid_resched:
-#/* sti */
-# call schedule
-# jmp paranoid_exit
-#paranoid_signal:
movl threadinfo_flags(%rcx),%ebx
andl $_TIF_WORK_MASK,%ebx
jz paranoid_swapgs
@@ -975,13 +932,10 @@
testl $_TIF_NEED_RESCHED,%ebx
jnz paranoid_schedule
movl %ebx,%edx /* arg3: thread flags */
-/* sti */
-# xorl %esi,%esi /* oldset */
-# movq %rsp,%rdi /* &pt_regs */
+ sti
xorl %esi,%esi /* arg2: oldset */
movq %rsp,%rdi /* arg1: &pt_regs */
call do_notify_resume
-# jmp paranoid_exit
cli
jmp paranoid_userspace
paranoid_schedule:
@@ -1057,4 +1011,3 @@
ENTRY(call_debug)
zeroentry do_call_debug
-
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/traps.c
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/traps.c Wed Nov 9
15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/traps.c Wed Nov 9
16:23:46 2005
@@ -89,7 +89,7 @@
static inline void conditional_sti(struct pt_regs *regs)
{
- if (regs->eflags & X86_EFLAGS_IF)
+ if ((uint8_t)(regs->cs >> 32) == 0)
local_irq_enable();
}
@@ -905,30 +905,33 @@
}
+/*
+ * NB. All these are "interrupt gates" (i.e. events_mask is set) because we
+ * specify <dpl>|4 in the second field.
+ */
static trap_info_t trap_table[] = {
- { 0, 0, (__KERNEL_CS|0x3), (unsigned long)divide_error
},
- { 1, 0, (__KERNEL_CS|0x3), (unsigned long)debug
},
- { 3, 3, (__KERNEL_CS|0x3), (unsigned long)int3
},
- { 4, 3, (__KERNEL_CS|0x3), (unsigned long)overflow
},
- { 5, 3, (__KERNEL_CS|0x3), (unsigned long)bounds
},
- { 6, 0, (__KERNEL_CS|0x3), (unsigned long)invalid_op
},
- { 7, 0, (__KERNEL_CS|0x3), (unsigned long)device_not_available
},
- { 9, 0, (__KERNEL_CS|0x3), (unsigned
long)coprocessor_segment_overrun},
- { 10, 0, (__KERNEL_CS|0x3), (unsigned long)invalid_TSS
},
- { 11, 0, (__KERNEL_CS|0x3), (unsigned long)segment_not_present
},
- { 12, 0, (__KERNEL_CS|0x3), (unsigned long)stack_segment
},
- { 13, 0, (__KERNEL_CS|0x3), (unsigned long)general_protection
},
- { 14, 0, (__KERNEL_CS|0x3), (unsigned long)page_fault
},
- { 15, 0, (__KERNEL_CS|0x3), (unsigned long)spurious_interrupt_bug
},
- { 16, 0, (__KERNEL_CS|0x3), (unsigned long)coprocessor_error
},
- { 17, 0, (__KERNEL_CS|0x3), (unsigned long)alignment_check
},
+ { 0, 0|4, (__KERNEL_CS|0x3), (unsigned long)divide_error
},
+ { 1, 0|4, (__KERNEL_CS|0x3), (unsigned long)debug
},
+ { 3, 3|4, (__KERNEL_CS|0x3), (unsigned long)int3
},
+ { 4, 3|4, (__KERNEL_CS|0x3), (unsigned long)overflow
},
+ { 5, 3|4, (__KERNEL_CS|0x3), (unsigned long)bounds
},
+ { 6, 0|4, (__KERNEL_CS|0x3), (unsigned long)invalid_op
},
+ { 7, 0|4, (__KERNEL_CS|0x3), (unsigned long)device_not_available
},
+ { 9, 0|4, (__KERNEL_CS|0x3), (unsigned
long)coprocessor_segment_overrun},
+ { 10, 0|4, (__KERNEL_CS|0x3), (unsigned long)invalid_TSS
},
+ { 11, 0|4, (__KERNEL_CS|0x3), (unsigned long)segment_not_present
},
+ { 12, 0|4, (__KERNEL_CS|0x3), (unsigned long)stack_segment
},
+ { 13, 0|4, (__KERNEL_CS|0x3), (unsigned long)general_protection
},
+ { 14, 0|4, (__KERNEL_CS|0x3), (unsigned long)page_fault
},
+ { 15, 0|4, (__KERNEL_CS|0x3), (unsigned long)spurious_interrupt_bug
},
+ { 16, 0|4, (__KERNEL_CS|0x3), (unsigned long)coprocessor_error
},
+ { 17, 0|4, (__KERNEL_CS|0x3), (unsigned long)alignment_check
},
#ifdef CONFIG_X86_MCE
- { 18, 0, (__KERNEL_CS|0x3), (unsigned long)machine_check
},
-#endif
- { 19, 0, (__KERNEL_CS|0x3), (unsigned long)simd_coprocessor_error
},
- { SYSCALL_VECTOR, 3, (__KERNEL_CS|0x3), (unsigned long)system_call },
+ { 18, 0|4, (__KERNEL_CS|0x3), (unsigned long)machine_check
},
+#endif
+ { 19, 0|4, (__KERNEL_CS|0x3), (unsigned long)simd_coprocessor_error
},
#ifdef CONFIG_IA32_EMULATION
- { IA32_SYSCALL_VECTOR, 3, (__KERNEL_CS|0x3), (unsigned
long)ia32_syscall},
+ { IA32_SYSCALL_VECTOR, 3|4, (__KERNEL_CS|0x3), (unsigned
long)ia32_syscall},
#endif
{ 0, 0, 0, 0 }
};
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/xen_entry.S
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/xen_entry.S Wed Nov 9
15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/xen_entry.S Wed Nov 9
16:23:46 2005
@@ -5,7 +5,7 @@
#define evtchn_upcall_pending 0
#define evtchn_upcall_mask 1
-#define sizeof_vcpu_shift 4
+#define sizeof_vcpu_shift 5
#ifdef CONFIG_SMP
//#define preempt_disable(reg) incl threadinfo_preempt_count(reg)
diff -r 136b2d20dc81 -r 5823dbfbb4cd
linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c Wed Nov 9 15:08:37 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c Wed Nov 9 16:23:46 2005
@@ -318,12 +318,12 @@
* bit 2 == 0 means kernel, 1 means user-mode
* bit 3 == 1 means fault was an instruction fetch
*/
-asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code,
- unsigned long address)
+asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
{
struct task_struct *tsk;
struct mm_struct *mm;
struct vm_area_struct * vma;
+ unsigned long address;
const struct exception_table_entry *fixup;
int write;
siginfo_t info;
@@ -342,11 +342,16 @@
}
}
#endif
+
+ /* get the address */
+ address = HYPERVISOR_shared_info->vcpu_data[
+ smp_processor_id()].arch.cr2;
+
if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
SIGSEGV) == NOTIFY_STOP)
return;
- if (likely(regs->eflags & X86_EFLAGS_IF))
+ if (likely((uint8_t)(regs->cs >> 32) == 0))
local_irq_enable();
if (unlikely(page_fault_trace))
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c Wed Nov 9 15:08:37 2005
+++ b/xen/arch/x86/setup.c Wed Nov 9 16:23:46 2005
@@ -430,6 +430,10 @@
/* Sanity check for unwanted bloat of dom0_op_t structure. */
BUG_ON(sizeof(((dom0_op_t *)0)->u) != sizeof(((dom0_op_t *)0)->u.pad));
+ BUG_ON(sizeof(start_info_t) > PAGE_SIZE);
+ BUG_ON(sizeof(shared_info_t) > PAGE_SIZE);
+ BUG_ON(sizeof(vcpu_info_t) != (sizeof(unsigned long) * 4));
+
init_frametable();
end_boot_allocator();
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c Wed Nov 9 15:08:37 2005
+++ b/xen/arch/x86/traps.c Wed Nov 9 16:23:46 2005
@@ -412,16 +412,16 @@
struct vcpu *v = current;
struct trap_bounce *tb = &v->arch.trap_bounce;
+ v->arch.guest_context.ctrlreg[2] = addr;
+ v->vcpu_info->arch.cr2 = addr;
+
ti = &v->arch.guest_context.trap_ctxt[TRAP_page_fault];
- tb->flags = TBF_EXCEPTION | TBF_EXCEPTION_ERRCODE | TBF_EXCEPTION_CR2;
- tb->cr2 = addr;
+ tb->flags = TBF_EXCEPTION | TBF_EXCEPTION_ERRCODE;
tb->error_code = error_code;
tb->cs = ti->cs;
tb->eip = ti->address;
if ( TI_GET_IF(ti) )
tb->flags |= TBF_INTERRUPT;
-
- v->arch.guest_context.ctrlreg[2] = addr;
}
static int handle_perdomain_mapping_fault(
@@ -931,6 +931,7 @@
case 2: /* Write CR2 */
v->arch.guest_context.ctrlreg[2] = *reg;
+ v->vcpu_info->arch.cr2 = *reg;
break;
case 3: /* Write CR3 */
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/arch/x86/x86_32/asm-offsets.c
--- a/xen/arch/x86/x86_32/asm-offsets.c Wed Nov 9 15:08:37 2005
+++ b/xen/arch/x86/x86_32/asm-offsets.c Wed Nov 9 16:23:46 2005
@@ -75,7 +75,6 @@
BLANK();
OFFSET(TRAPBOUNCE_error_code, struct trap_bounce, error_code);
- OFFSET(TRAPBOUNCE_cr2, struct trap_bounce, cr2);
OFFSET(TRAPBOUNCE_flags, struct trap_bounce, flags);
OFFSET(TRAPBOUNCE_cs, struct trap_bounce, cs);
OFFSET(TRAPBOUNCE_eip, struct trap_bounce, eip);
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/arch/x86/x86_32/entry.S
--- a/xen/arch/x86/x86_32/entry.S Wed Nov 9 15:08:37 2005
+++ b/xen/arch/x86/x86_32/entry.S Wed Nov 9 16:23:46 2005
@@ -401,30 +401,25 @@
subl $4,%esi # push error_code onto guest frame
movl TRAPBOUNCE_error_code(%edx),%eax
FLT17: movl %eax,%gs:(%esi)
- testb $TBF_EXCEPTION_CR2,%cl
- jz 2f
- subl $4,%esi # push %cr2 onto guest frame
- movl TRAPBOUNCE_cr2(%edx),%eax
-FLT18: movl %eax,%gs:(%esi)
1: testb $TBF_FAILSAFE,%cl
jz 2f
subl $16,%esi # add DS/ES/FS/GS to failsafe stack frame
testl $X86_EFLAGS_VM,UREGS_eflags+4(%esp)
jz nvm86_2
xorl %eax,%eax # VM86: we write zero selector values
-FLT19: movl %eax,%gs:(%esi)
-FLT20: movl %eax,%gs:4(%esi)
-FLT21: movl %eax,%gs:8(%esi)
-FLT22: movl %eax,%gs:12(%esi)
+FLT18: movl %eax,%gs:(%esi)
+FLT19: movl %eax,%gs:4(%esi)
+FLT20: movl %eax,%gs:8(%esi)
+FLT21: movl %eax,%gs:12(%esi)
jmp 2f
nvm86_2:movl UREGS_ds+4(%esp),%eax # non-VM86: write real selector values
-FLT23: movl %eax,%gs:(%esi)
+FLT22: movl %eax,%gs:(%esi)
movl UREGS_es+4(%esp),%eax
-FLT24: movl %eax,%gs:4(%esi)
+FLT23: movl %eax,%gs:4(%esi)
movl UREGS_fs+4(%esp),%eax
-FLT25: movl %eax,%gs:8(%esi)
+FLT24: movl %eax,%gs:8(%esi)
movl UREGS_gs+4(%esp),%eax
-FLT26: movl %eax,%gs:12(%esi)
+FLT25: movl %eax,%gs:12(%esi)
2: testl $X86_EFLAGS_VM,UREGS_eflags+4(%esp)
jz nvm86_3
xorl %eax,%eax /* zero DS-GS, just as a real CPU would */
@@ -456,7 +451,6 @@
.long FLT20,domain_crash_synchronous , FLT21,domain_crash_synchronous
.long FLT22,domain_crash_synchronous , FLT23,domain_crash_synchronous
.long FLT24,domain_crash_synchronous , FLT25,domain_crash_synchronous
- .long FLT26,domain_crash_synchronous
.previous
ALIGN
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/arch/x86/x86_64/asm-offsets.c
--- a/xen/arch/x86/x86_64/asm-offsets.c Wed Nov 9 15:08:37 2005
+++ b/xen/arch/x86/x86_64/asm-offsets.c Wed Nov 9 16:23:46 2005
@@ -75,7 +75,6 @@
BLANK();
OFFSET(TRAPBOUNCE_error_code, struct trap_bounce, error_code);
- OFFSET(TRAPBOUNCE_cr2, struct trap_bounce, cr2);
OFFSET(TRAPBOUNCE_flags, struct trap_bounce, flags);
OFFSET(TRAPBOUNCE_cs, struct trap_bounce, cs);
OFFSET(TRAPBOUNCE_eip, struct trap_bounce, eip);
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S Wed Nov 9 15:08:37 2005
+++ b/xen/arch/x86/x86_64/entry.S Wed Nov 9 16:23:46 2005
@@ -370,27 +370,22 @@
subq $8,%rsi
movl TRAPBOUNCE_error_code(%rdx),%eax
FLT7: movq %rax,(%rsi) # ERROR CODE
- testb $TBF_EXCEPTION_CR2,%cl
- jz 2f
- subq $8,%rsi
- movq TRAPBOUNCE_cr2(%rdx),%rax
-FLT8: movq %rax,(%rsi) # CR2
1: testb $TBF_FAILSAFE,%cl
jz 2f
subq $32,%rsi
movl %gs,%eax
-FLT9: movq %rax,24(%rsi) # GS
+FLT8: movq %rax,24(%rsi) # GS
movl %fs,%eax
-FLT10: movq %rax,16(%rsi) # FS
+FLT9: movq %rax,16(%rsi) # FS
movl %es,%eax
-FLT11: movq %rax,8(%rsi) # ES
+FLT10: movq %rax,8(%rsi) # ES
movl %ds,%eax
-FLT12: movq %rax,(%rsi) # DS
+FLT11: movq %rax,(%rsi) # DS
2: subq $16,%rsi
movq UREGS_r11+8(%rsp),%rax
-FLT13: movq %rax,8(%rsi) # R11
+FLT12: movq %rax,8(%rsi) # R11
movq UREGS_rcx+8(%rsp),%rax
-FLT14: movq %rax,(%rsi) # RCX
+FLT13: movq %rax,(%rsi) # RCX
/* Rewrite our stack frame and return to guest-OS mode. */
/* IA32 Ref. Vol. 3: TF, VM, RF and NT flags are cleared on trap. */
movl $TRAP_syscall,UREGS_entry_vector+8(%rsp)
@@ -411,7 +406,6 @@
.quad FLT8,domain_crash_synchronous , FLT9,domain_crash_synchronous
.quad FLT10,domain_crash_synchronous , FLT11,domain_crash_synchronous
.quad FLT12,domain_crash_synchronous , FLT13,domain_crash_synchronous
- .quad FLT14,domain_crash_synchronous
.previous
ALIGN
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/asm-x86/domain.h
--- a/xen/include/asm-x86/domain.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/asm-x86/domain.h Wed Nov 9 16:23:46 2005
@@ -8,7 +8,6 @@
struct trap_bounce {
unsigned long error_code;
- unsigned long cr2;
unsigned short flags; /* TBF_ */
unsigned short cs;
unsigned long eip;
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/asm-x86/processor.h
--- a/xen/include/asm-x86/processor.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/asm-x86/processor.h Wed Nov 9 16:23:46 2005
@@ -121,7 +121,6 @@
/* 'trap_bounce' flags values */
#define TBF_EXCEPTION 1
#define TBF_EXCEPTION_ERRCODE 2
-#define TBF_EXCEPTION_CR2 4
#define TBF_INTERRUPT 8
#define TBF_FAILSAFE 16
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/public/arch-ia64.h Wed Nov 9 16:23:46 2005
@@ -271,12 +271,10 @@
typedef mapped_regs_t vpd_t;
-#define __ARCH_HAS_VCPU_INFO
-
typedef struct {
unsigned int flags;
unsigned long start_info_pfn;
-} arch_shared_info_t; // DON'T PACK
+} arch_shared_info_t;
typedef struct vcpu_guest_context {
#define VGCF_FPU_VALID (1<<0)
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/public/arch-x86_32.h
--- a/xen/include/public/arch-x86_32.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/public/arch-x86_32.h Wed Nov 9 16:23:46 2005
@@ -132,6 +132,11 @@
unsigned long pfn_to_mfn_frame_list_list;
} arch_shared_info_t;
+typedef struct {
+ unsigned long cr2;
+ unsigned long pad; /* sizeof(vcpu_info_t) == 16 */
+} arch_vcpu_info_t;
+
#endif
#endif
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/public/arch-x86_64.h
--- a/xen/include/public/arch-x86_64.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/public/arch-x86_64.h Wed Nov 9 16:23:46 2005
@@ -201,6 +201,11 @@
unsigned long pfn_to_mfn_frame_list_list;
} arch_shared_info_t;
+typedef struct {
+ unsigned long cr2;
+ unsigned long pad; /* sizeof(vcpu_info_t) == 32 */
+} arch_vcpu_info_t;
+
#endif /* !__ASSEMBLY__ */
#endif
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/public/dom0_ops.h
--- a/xen/include/public/dom0_ops.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/public/dom0_ops.h Wed Nov 9 16:23:46 2005
@@ -19,7 +19,7 @@
* This makes sure that old versions of dom0 tools will stop working in a
* well-defined way (rather than crashing the machine, for instance).
*/
-#define DOM0_INTERFACE_VERSION 0xAAAA1011
+#define DOM0_INTERFACE_VERSION 0xAAAA1012
/************************************************************************/
diff -r 136b2d20dc81 -r 5823dbfbb4cd xen/include/public/xen.h
--- a/xen/include/public/xen.h Wed Nov 9 15:08:37 2005
+++ b/xen/include/public/xen.h Wed Nov 9 16:23:46 2005
@@ -299,9 +299,7 @@
uint8_t evtchn_upcall_pending;
uint8_t evtchn_upcall_mask;
unsigned long evtchn_pending_sel;
-#ifdef __ARCH_HAS_VCPU_INFO
arch_vcpu_info_t arch;
-#endif
} vcpu_info_t;
typedef struct vcpu_time_info {
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|