diff options
author | cl349@arcadians.cl.cam.ac.uk <cl349@arcadians.cl.cam.ac.uk> | 2004-11-29 16:46:59 +0000 |
---|---|---|
committer | cl349@arcadians.cl.cam.ac.uk <cl349@arcadians.cl.cam.ac.uk> | 2004-11-29 16:46:59 +0000 |
commit | 9ea843ee2dcd77f39886a49e8334b77d05ab1dd0 (patch) | |
tree | 56ca7a1fb168a8700e7d29bc852fbef39e64d95b | |
parent | 2b9c469bec58196f555c5686a5ba114b8d6c4844 (diff) | |
download | xen-9ea843ee2dcd77f39886a49e8334b77d05ab1dd0.tar.gz xen-9ea843ee2dcd77f39886a49e8334b77d05ab1dd0.tar.bz2 xen-9ea843ee2dcd77f39886a49e8334b77d05ab1dd0.zip |
bitkeeper revision 1.1159.200.1 (41ab5283wLmdIWOfwXbjBnwp7bSLKg)
entry.S:
Use macros for loading %esi and for saving the upcall mask.
-rw-r--r-- | linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S b/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S index d530d32150..ca4d0f4d05 100644 --- a/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S +++ b/linux-2.6.9-xen-sparse/arch/xen/i386/kernel/entry.S @@ -80,8 +80,13 @@ VM_MASK = 0x00020000 #define evtchn_upcall_pending /* 0 */ #define evtchn_upcall_mask 1 +#define XEN_GET_VCPU_INFO(reg) movl HYPERVISOR_shared_info,reg #define XEN_BLOCK_EVENTS(reg) movb $1,evtchn_upcall_mask(reg) #define XEN_UNBLOCK_EVENTS(reg) movb $0,evtchn_upcall_mask(reg) +#define XEN_SAVE_UPCALL_MASK(reg,tmp,off) \ + movb evtchn_upcall_mask(reg), tmp; \ + movb tmp, off(%esp) + #define XEN_TEST_PENDING(reg) testb $0xFF,evtchn_upcall_pending(reg) #ifdef CONFIG_PREEMPT @@ -108,9 +113,8 @@ VM_MASK = 0x00020000 #define SAVE_ALL \ SAVE_ALL_NO_EVENTMASK; \ - movl HYPERVISOR_shared_info, %esi; \ - movb evtchn_upcall_mask(%esi), %dl; \ - movb %dl, EVENT_MASK(%esp) + XEN_GET_VCPU_INFO(%esi); \ + XEN_SAVE_UPCALL_MASK(%esi,%dl,EVENT_MASK) #define RESTORE_INT_REGS \ popl %ebx; \ @@ -194,7 +198,7 @@ ENTRY(ret_from_fork) call schedule_tail GET_THREAD_INFO(%ebp) popl %eax - movl HYPERVISOR_shared_info, %esi + XEN_GET_VCPU_INFO(%esi) jmp syscall_exit /* @@ -215,7 +219,7 @@ ret_from_intr: testl $(VM_MASK | 2), %eax jz resume_kernel # returning to kernel or vm86-space ENTRY(resume_userspace) - movl HYPERVISOR_shared_info, %esi + XEN_GET_VCPU_INFO(%esi) XEN_BLOCK_EVENTS(%esi) # make sure we don't miss an interrupt # setting need_resched or sigpending # between sampling and the iret @@ -227,7 +231,7 @@ ENTRY(resume_userspace) #ifdef CONFIG_PREEMPT ENTRY(resume_kernel) - movl HYPERVISOR_shared_info, %esi + XEN_GET_VCPU_INFO(%esi) cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? jnz restore_all need_resched: @@ -468,9 +472,8 @@ error_code: movl $(__USER_DS), %edx movl %edx, %ds movl %edx, %es - movl HYPERVISOR_shared_info, %esi - movb evtchn_upcall_mask(%esi), %dl - movb %dl, EVENT_MASK+8(%esp) + XEN_GET_VCPU_INFO(%esi) + XEN_SAVE_UPCALL_MASK(%esi,%dl,EVENT_MASK+8) call *%edi addl $8, %esp jmp ret_from_exception @@ -494,7 +497,7 @@ ENTRY(hypervisor_callback) jb 11f cmpl $ecrit,%eax jb critical_region_fixup -11: movl HYPERVISOR_shared_info, %esi +11: XEN_GET_VCPU_INFO(%esi) movb $0, EVENT_MASK(%esp) push %esp call evtchn_do_upcall @@ -537,7 +540,7 @@ critical_region_fixup: jmp 11b critical_fixup_table: - .byte 0x00,0x00,0x00 # testb $0xff,(%esi) + .byte 0x00,0x00,0x00 # testb $0xff,(%esi) = XEN_TEST_PENDING .byte 0x00,0x00 # jnz 14f .byte 0x00 # pop %ebx .byte 0x04 # pop %ecx @@ -748,7 +751,6 @@ ENTRY(page_fault) decl %eax /* eax = -1 */ pushl %ecx pushl %ebx - GET_THREAD_INFO(%ebp) cld movl %es,%ecx movl ORIG_EAX(%esp), %esi /* get the error code */ @@ -762,9 +764,8 @@ ENTRY(page_fault) movl $(__KERNEL_DS),%edx movl %edx,%ds movl %edx,%es - movl HYPERVISOR_shared_info, %esi - movb evtchn_upcall_mask(%esi), %dl - movb %dl, EVENT_MASK+12(%esp) + XEN_GET_VCPU_INFO(%esi) + XEN_SAVE_UPCALL_MASK(%esi,%dl,EVENT_MASK+12) call do_page_fault addl $12,%esp jmp ret_from_exception |