This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / arch / x86_64 / kernel / xen_entry.S
1 /*
2  * Copied from arch/xen/i386/kernel/entry.S
3  */                        
4 /* Offsets into shared_info_t. */                
5 #define evtchn_upcall_pending           /* 0 */
6 #define evtchn_upcall_mask              1
7
8 #define sizeof_vcpu_shift               6
9
10 #ifdef CONFIG_SMP
11 //#define preempt_disable(reg)  incl threadinfo_preempt_count(reg)
12 //#define preempt_enable(reg)   decl threadinfo_preempt_count(reg)
13 #define preempt_disable(reg)
14 #define preempt_enable(reg)
15 #define XEN_GET_VCPU_INFO(reg)  preempt_disable(%rbp)                   ; \
16                                 movq %gs:pda_cpunumber,reg              ; \
17                                 shl  $32, reg                           ; \
18                                 shr  $32-sizeof_vcpu_shift,reg          ; \
19                                 addq HYPERVISOR_shared_info,reg
20 #define XEN_PUT_VCPU_INFO(reg)  preempt_enable(%rbp)                    ; \
21 #define XEN_PUT_VCPU_INFO_fixup .byte 0xff,0xff,0xff
22 #else
23 #define XEN_GET_VCPU_INFO(reg)  movq HYPERVISOR_shared_info,reg
24 #define XEN_PUT_VCPU_INFO(reg)
25 #define XEN_PUT_VCPU_INFO_fixup
26 #endif
27
28 #define XEN_LOCKED_BLOCK_EVENTS(reg)    movb $1,evtchn_upcall_mask(reg)
29 #define XEN_LOCKED_UNBLOCK_EVENTS(reg)  movb $0,evtchn_upcall_mask(reg)
30 #define XEN_BLOCK_EVENTS(reg)   XEN_GET_VCPU_INFO(reg)                  ; \
31                                 XEN_LOCKED_BLOCK_EVENTS(reg)            ; \
32                                 XEN_PUT_VCPU_INFO(reg)
33 #define XEN_UNBLOCK_EVENTS(reg) XEN_GET_VCPU_INFO(reg)                  ; \
34                                 XEN_LOCKED_UNBLOCK_EVENTS(reg)          ; \
35                                 XEN_PUT_VCPU_INFO(reg)
36 #define XEN_TEST_PENDING(reg)   testb $0xFF,evtchn_upcall_pending(reg)
37
38 VGCF_IN_SYSCALL = (1<<8)
39         
40