[BACK]Return to frameasm.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / amd64 / include

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/amd64/include/frameasm.h between version 1.16 and 1.16.6.1

version 1.16, 2011/08/10 06:33:13 version 1.16.6.1, 2012/06/02 11:08:48
Line 17 
Line 17 
 /* Xen do not need swapgs, done by hypervisor */  /* Xen do not need swapgs, done by hypervisor */
 #define swapgs  #define swapgs
 #define iretq   pushq $0 ; jmp HYPERVISOR_iret  #define iretq   pushq $0 ; jmp HYPERVISOR_iret
 #endif  #define XEN_ONLY2(x,y)  x,y
   #define NOT_XEN(x)
   
   #define CLI(temp_reg) \
           movq CPUVAR(VCPU),%r ## temp_reg ;                      \
           movb $1,EVTCHN_UPCALL_MASK(%r ## temp_reg);
   
   #define STI(temp_reg) \
           movq CPUVAR(VCPU),%r ## temp_reg ;                      \
           movb $0,EVTCHN_UPCALL_MASK(%r ## temp_reg);
   
   #else /* XEN */
   #define XEN_ONLY2(x,y)
   #define NOT_XEN(x)      x
   #define CLI(temp_reg) cli
   #define STI(temp_reg) sti
   #endif  /* XEN */
   
 /*  /*
  * These are used on interrupt or trap entry or exit.   * These are used on interrupt or trap entry or exit.
Line 57 
Line 73 
         movq    TF_RBX(%rsp),%rbx       ; \          movq    TF_RBX(%rsp),%rbx       ; \
         movq    TF_RAX(%rsp),%rax          movq    TF_RAX(%rsp),%rax
   
 #define INTRENTRY \  #define INTRENTRY_L(kernel_trap, usertrap) \
         subq    $TF_REGSIZE,%rsp        ; \          subq    $TF_REGSIZE,%rsp        ; \
         testq   $SEL_UPL,TF_CS(%rsp)    ; \          INTR_SAVE_GPRS                  ; \
         je      98f                     ; \          testb   $SEL_UPL,TF_CS(%rsp)    ; \
           je      kernel_trap             ; \
   usertrap                                ; \
         swapgs                          ; \          swapgs                          ; \
         movw    %gs,TF_GS(%rsp)         ; \          movw    %gs,TF_GS(%rsp)         ; \
         movw    %fs,TF_FS(%rsp)         ; \          movw    %fs,TF_FS(%rsp)         ; \
         movw    %es,TF_ES(%rsp)         ; \          movw    %es,TF_ES(%rsp)         ; \
         movw    %ds,TF_DS(%rsp)         ; \          movw    %ds,TF_DS(%rsp)
 98:     INTR_SAVE_GPRS  
   #define INTRENTRY \
           INTRENTRY_L(98f,)               ; \
   98:
   
 #ifndef XEN  
 #define INTRFASTEXIT \  #define INTRFASTEXIT \
         INTR_RESTORE_GPRS               ; \          INTR_RESTORE_GPRS               ; \
         testq   $SEL_UPL,TF_CS(%rsp)    /* Interrupted %cs */ ; \          testq   $SEL_UPL,TF_CS(%rsp)    /* Interrupted %cs */ ; \
         je      99f                     ; \          je      99f                     ; \
         cli                             ; \  /* XEN: Disabling events before going to user mode sounds like a BAD idea */ \
           NOT_XEN(cli;)                     \
         movw    TF_ES(%rsp),%es         ; \          movw    TF_ES(%rsp),%es         ; \
         movw    TF_DS(%rsp),%ds         ; \          movw    TF_DS(%rsp),%ds         ; \
         swapgs                          ; \          swapgs                          ; \
Line 88 
Line 109 
         pushfq                          ; \          pushfq                          ; \
         movl    %cs,%r11d               ; \          movl    %cs,%r11d               ; \
         pushq   %r11                    ; \          pushq   %r11                    ; \
   /* XEN: We must fixup CS, as even kernel mode runs at CPL 3 */ \
           XEN_ONLY2(andb  $0xfc,(%rsp);)    \
         pushq   %r13                    ;          pushq   %r13                    ;
   
 #else   /* !XEN */  
 /*  
  * Disabling events before going to user mode sounds like a BAD idea  
  * do no restore gs either, HYPERVISOR_iret will do a swapgs  
  */  
 #define INTRFASTEXIT \  
         INTR_RESTORE_GPRS               ; \  
         testq   $SEL_UPL,TF_CS(%rsp)    ; \  
         je      99f                     ; \  
         movw    TF_ES(%rsp),%es         ; \  
         movw    TF_DS(%rsp),%ds         ; \  
 99:     addq    $TF_REGSIZE+16,%rsp     /* + T_xxx and error code */ ; \  
         iretq  
   
 /* We must fixup CS, as even kernel mode runs at CPL 3 */  
 #define INTR_RECURSE_HWFRAME \  
         movq    %rsp,%r10               ; \  
         movl    %ss,%r11d               ; \  
         pushq   %r11                    ; \  
         pushq   %r10                    ; \  
         pushfq                          ; \  
         movl    %cs,%r11d               ; \  
         pushq   %r11                    ; \  
         andb    $0xfc,(%rsp)            ; \  
         pushq   %r13                    ;  
   
 #endif  /* !XEN */  
   
 #define DO_DEFERRED_SWITCH \  #define DO_DEFERRED_SWITCH \
         cmpl    $0, CPUVAR(WANT_PMAPLOAD)               ; \          cmpl    $0, CPUVAR(WANT_PMAPLOAD)               ; \
         jz      1f                                      ; \          jz      1f                                      ; \
         call    _C_LABEL(do_pmap_load)                  ; \          call    _C_LABEL(do_pmap_load)                  ; \
         1:  1:
   
 #define CHECK_DEFERRED_SWITCH \  #define CHECK_DEFERRED_SWITCH \
         cmpl    $0, CPUVAR(WANT_PMAPLOAD)          cmpl    $0, CPUVAR(WANT_PMAPLOAD)
Line 130 
Line 125 
 #define CHECK_ASTPENDING(reg)   cmpl    $0, L_MD_ASTPENDING(reg)  #define CHECK_ASTPENDING(reg)   cmpl    $0, L_MD_ASTPENDING(reg)
 #define CLEAR_ASTPENDING(reg)   movl    $0, L_MD_ASTPENDING(reg)  #define CLEAR_ASTPENDING(reg)   movl    $0, L_MD_ASTPENDING(reg)
   
 #ifdef XEN  
 #define CLI(temp_reg) \  
         movq CPUVAR(VCPU),%r ## temp_reg ;                      \  
         movb $1,EVTCHN_UPCALL_MASK(%r ## temp_reg);  
   
 #define STI(temp_reg) \  
         movq CPUVAR(VCPU),%r ## temp_reg ;                      \  
         movb $0,EVTCHN_UPCALL_MASK(%r ## temp_reg);  
   
 #else /* XEN */  
 #define CLI(temp_reg) cli  
 #define STI(temp_reg) sti  
 #endif  /* XEN */  
   
 #endif /* _AMD64_MACHINE_FRAMEASM_H */  #endif /* _AMD64_MACHINE_FRAMEASM_H */

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.16.6.1

CVSweb <webmaster@jp.NetBSD.org>