[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Hi folks,



ChangeSet 1.1371, 2005/04/22 17:57:55+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Hi folks,
        
         arch/xen/x86_64/kernel/entry.S         |  131
        +++++++++++++++++++--------------
         arch/xen/x86_64/kernel/process.c       |    5 -
         arch/xen/x86_64/kernel/traps.c         |    3 
         arch/xen/x86_64/kernel/vsyscall.c      |    2 
         include/asm-xen/asm-x86_64/hypercall.h |    5 -
         include/asm-xen/asm-x86_64/system.h    |    6 -
         6 files changed, 88 insertions(+), 64 deletions(-)
        
        Signed-off-by: Jun Nakajima <jun.nakajima@xxxxxxxxx>
        
        Attached contains bug fixes:
        1. hang at floppy driver
        2. hiccups at boot time
        3. FP save/restore
        4. cleanups in entry.S (critical section fixup, etc.)
        5. time problem (temporarily disables vgettimeofday that uses TSC). I'm
        not sure if we can use TSC-based vxtime in Xen. So we need some cleanups
        there.
        
        1 & 2 were simply fixed in process.c; xen_idle() is now identical to the
        32-bit one.
        
        I'm still working on failsafe_callback (because now I'm getting it), but
        the system should be ready for broader ranges of people. Some config
        seems to cause a panic in the hypervisor, and I'm also looking at it.



 arch/xen/x86_64/kernel/entry.S         |  131 +++++++++++++++++++--------------
 arch/xen/x86_64/kernel/process.c       |    5 -
 arch/xen/x86_64/kernel/traps.c         |    3 
 arch/xen/x86_64/kernel/vsyscall.c      |    2 
 include/asm-xen/asm-x86_64/hypercall.h |    5 -
 include/asm-xen/asm-x86_64/system.h    |    6 -
 6 files changed, 88 insertions(+), 64 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S 
b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S
--- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S    2005-04-22 
13:04:38 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S    2005-04-22 
13:04:38 -04:00
@@ -204,7 +204,7 @@
        jnz rff_trace
 rff_action:    
        RESTORE_REST
-       cmpl $__KERNEL_CS,CS-ARGOFFSET(%rsp)    # from kernel_thread?
+       testl $3,CS-ARGOFFSET(%rsp)     # from kernel_thread?
        je   int_ret_from_sys_call
        testl $_TIF_IA32,threadinfo_flags(%rcx)
        jnz  int_ret_from_sys_call
@@ -268,12 +268,12 @@
        /* edi: flagmask */
 sysret_check:          
        GET_THREAD_INFO(%rcx)
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_BLOCK_EVENTS(%r11)        
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_BLOCK_EVENTS(%rsi)        
        movl threadinfo_flags(%rcx),%edx
        andl %edi,%edx
        jnz  sysret_careful 
-        XEN_UNBLOCK_EVENTS(%r11)                
+        XEN_UNBLOCK_EVENTS(%rsi)                
        RESTORE_ARGS 0,8,0
         SWITCH_TO_USER ECF_IN_SYSCALL
 
@@ -282,8 +282,8 @@
 sysret_careful:
        bt $TIF_NEED_RESCHED,%edx
        jnc sysret_signal
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_BLOCK_EVENTS(%r11)        
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_BLOCK_EVENTS(%rsi)        
        pushq %rdi
        call schedule
        popq  %rdi
@@ -292,8 +292,8 @@
        /* Handle a signal */ 
 sysret_signal:
 /*     sti */
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_UNBLOCK_EVENTS(%r11)        
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_UNBLOCK_EVENTS(%rsi)        
        testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
        jz    1f
 
@@ -334,8 +334,8 @@
  * Has correct top of stack, but partial stack frame.
  */    
 ENTRY(int_ret_from_sys_call)   
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_BLOCK_EVENTS(%r11)
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_BLOCK_EVENTS(%rsi)
        testb $3,CS-ARGOFFSET(%rsp)
         jnz 1f
         /* Need to set the proper %ss (not NULL) for ring 3 iretq */
@@ -358,8 +358,8 @@
        bt $TIF_NEED_RESCHED,%edx
        jnc  int_very_careful
 /*     sti */
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_UNBLOCK_EVENTS(%r11)
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_UNBLOCK_EVENTS(%rsi)
        pushq %rdi
        call schedule
        popq %rdi
@@ -368,6 +368,8 @@
        /* handle signals and tracing -- both require a full stack frame */
 int_very_careful:
 /*     sti */
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_UNBLOCK_EVENTS(%rsi)
        SAVE_REST
        /* Check for syscall exit trace */      
        testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edx
@@ -510,26 +512,26 @@
        jnz  retint_careful
 retint_restore_args:                           
        RESTORE_ARGS 0,8,0                                              
-        testb $3,8(%rsp)                # check CS
-        jnz  user_mode
+       testb $3,8(%rsp)                # check CS
+       jnz  user_mode
 kernel_mode:
         orb   $3,1*8(%rsp)
        iretq
 user_mode:
-        SWITCH_TO_USER 0                        
+       SWITCH_TO_USER 0                        
        
        /* edi: workmask, edx: work */  
 retint_careful:
        bt    $TIF_NEED_RESCHED,%edx
        jnc   retint_signal
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_UNBLOCK_EVENTS(%r11)
+       XEN_GET_VCPU_INFO(%rsi)
+       XEN_UNBLOCK_EVENTS(%rsi)
 /*     sti */        
        pushq %rdi
        call  schedule
        popq %rdi               
-        XEN_GET_VCPU_INFO(%r11)        
-        XEN_BLOCK_EVENTS(%r11)         
+       XEN_GET_VCPU_INFO(%rsi)        
+       XEN_BLOCK_EVENTS(%rsi)          
        GET_THREAD_INFO(%rcx)
 /*     cli */
        jmp retint_check
@@ -537,16 +539,16 @@
 retint_signal:
        testl $(_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SINGLESTEP),%edx
        jz    retint_restore_args
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_UNBLOCK_EVENTS(%r11)
+        XEN_GET_VCPU_INFO(%rsi)
+        XEN_UNBLOCK_EVENTS(%rsi)
        SAVE_REST
        movq $-1,ORIG_RAX(%rsp)                         
        xorq %rsi,%rsi          # oldset
        movq %rsp,%rdi          # &pt_regs
        call do_notify_resume
        RESTORE_REST
-        XEN_GET_VCPU_INFO(%r11)        
-        XEN_BLOCK_EVENTS(%r11)         
+        XEN_GET_VCPU_INFO(%rsi)        
+        XEN_BLOCK_EVENTS(%rsi)         
        movl $_TIF_NEED_RESCHED,%edi
        GET_THREAD_INFO(%rcx)   
        jmp retint_check
@@ -564,11 +566,11 @@
        jc   retint_restore_args
        movl $PREEMPT_ACTIVE,threadinfo_preempt_count(%rcx)
 /*     sti */
-        XEN_GET_VCPU_INFO(%r11)
-        XEN_BLOCK_EVENTS(%r11)
+       XEN_GET_VCPU_INFO(%rsi)
+       XEN_UNBLOCK_EVENTS(%rsi)
        call schedule
-        XEN_GET_VCPU_INFO(%r11) /* %esi can be different */
-        XEN_UNBLOCK_EVENTS(%r11)
+       XEN_GET_VCPU_INFO(%rsi) /* %esi can be different */
+       XEN_BLOCK_EVENTS(%rsi)
 /*     cli */
        GET_THREAD_INFO(%rcx)
        movl $0,threadinfo_preempt_count(%rcx) 
@@ -796,7 +798,13 @@
        jnz  14f                        # process more events if necessary...
        XEN_UNLOCK_VCPU_INFO_SMP(%rsi)
         RESTORE_REST
-        jmp retint_restore_args
+        RESTORE_ARGS 0,8,0
+        testb $3,8(%rsp)                # check CS
+        jnz  crit_user_mode
+        orb   $3,1*8(%rsp)
+        iretq
+crit_user_mode:
+        SWITCH_TO_USER 0 
         
 14:    XEN_LOCKED_BLOCK_EVENTS(%rsi)
        XEN_UNLOCK_VCPU_INFO_SMP(%rsi)
@@ -842,32 +850,47 @@
        jmp   11b
 
 critical_fixup_table:
-       .word 0x0000,0x0000,0x0000,0x0000         # testb  $0xff,0x0(%rsi)
-       .word 0x0000,0x0000                       # jne    ffffffff8010daa0 14f
-       .word 0x0000,0x0000,0x0000,0x0000         # mov    (%rsp),%r15
-       .word 0x0808,0x0808,0x0808,0x0808,0x0808  # mov    0x8(%rsp),%r14
-       .word 0x1010,0x1010,0x1010,0x1010,0x1010  # mov    0x10(%rsp),%r13
-       .word 0x1818,0x1818,0x1818,0x1818,0x1818  # mov    0x18(%rsp),%r12
-       .word 0x2020,0x2020,0x2020,0x2020,0x2020  # mov    0x20(%rsp),%rbp
-       .word 0x2828,0x2828,0x2828,0x2828,0x2828  # mov    0x28(%rsp),%rbx
-       .word 0x3030,0x3030,0x3030,0x3030         # add    $0x30,%rsp
-       .word 0x0030,0x0030,0x0030,0x0030,0x0030  # testb  $0x1,0x74(%rsp)
-       .word 0x0030,0x0030,0x0030,0x0030,0x0030,0x0030 # jne    
ffffffff8010d740 <user_mode>
-       .word 0x0030,0x0030,0x0030,0x0030         # mov    (%rsp),%r11
-       .word 0x0838,0x0838,0x0838,0x0838,0x0838  # mov    0x8(%rsp),%r10
-       .word 0x1040,0x1040,0x1040,0x1040,0x1040  # mov    0x10(%rsp),%r9
-       .word 0x1848,0x1848,0x1848,0x1848,0x1848  # mov    0x18(%rsp),%r8
-       .word 0x2060,0x2060,0x2060,0x2060,0x2060  # mov    0x20(%rsp),%rax
-       .word 0x2868,0x2868,0x2868,0x2868,0x2868  # mov    0x28(%rsp),%rcx
-       .word 0x3070,0x3070,0x3070,0x3070,0x3070  # mov    0x30(%rsp),%rdx
-       .word 0x3878,0x3878,0x3878,0x3878,0x3878  # mov    0x38(%rsp),%rsi
-       .word 0x4080,0x4080,0x4080,0x4080,0x4080  # mov    0x40(%rsp),%rdi
-       .word 0x4888,0x4888,0x4888,0x4888         # add    $0x50,%rsp
-       .word 0x0000,0x0000                       # iretq
-       .word 0x0000,0x0000,0x0000,0x0000         # movb   $0x1,0x1(%rsi)
-       .word 0x0000,0x0000,0x0000                # mov    %rsp,%rdi
-       .word 0x0000,0x0000,0x0000,0x0000,0x0000  # jmpq   11b
- 
+        .byte 0x00,0x00,0x00,0x00                 # testb  $0xff,0x0(%rsi)
+        .byte 0x00,0x00,0x00,0x00,0x00,0x00       # jne    
<crit_user_mode+0x42>
+        .byte 0x00,0x00,0x00,0x00                 # mov    (%rsp),%r15
+        .byte 0x00,0x00,0x00,0x00,0x00            # mov    0x8(%rsp),%r14
+        .byte 0x00,0x00,0x00,0x00,0x00            # mov    0x10(%rsp),%r13
+        .byte 0x00,0x00,0x00,0x00,0x00            # mov    0x18(%rsp),%r12
+        .byte 0x00,0x00,0x00,0x00,0x00            # mov    0x20(%rsp),%rbp
+        .byte 0x00,0x00,0x00,0x00,0x00            # mov    0x28(%rsp),%rbx
+        .byte 0x00,0x00,0x00,0x00                 # add    $0x30,%rsp
+        .byte 0x30,0x30,0x30,0x30                 # mov    (%rsp),%r11
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x8(%rsp),%r10
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x10(%rsp),%r9
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x18(%rsp),%r8
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x20(%rsp),%rax
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x28(%rsp),%rcx
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x30(%rsp),%rdx
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x38(%rsp),%rsi
+        .byte 0x30,0x30,0x30,0x30,0x30            # mov    0x40(%rsp),%rdi
+        .byte 0x30,0x30,0x30,0x30                 # add    $0x50,%rsp
+        .byte 0x80,0x80,0x80,0x80,0x80            # testb  $0x3,0x8(%rsp)
+        .byte 0x80,0x80                           # jne    ffffffff8010dc25 
<crit_user_mode>
+        .byte 0x80,0x80,0x80,0x80                 # orb    $0x3,0x8(%rsp)
+        .byte 0x80,0x80                           # iretq
+                                                  # <crit_user_mode>:
+        .byte 0x80,0x80,0x80,0x80,0x80,0x80,0x80  # movq   $0x0,%gs:0x60
+        .byte 0x80,0x80,0x80,0x80,0x80
+        .byte 0x80,0x80,0x80,0x80                 # sub    $0x20,%rsp
+        .byte 0x60,0x60,0x60,0x60                 # mov    %rax,(%rsp)
+        .byte 0x60,0x60,0x60,0x60,0x60            # mov    %r11,0x8(%rsp)
+        .byte 0x60,0x60,0x60,0x60,0x60            # mov    %rcx,0x10(%rsp)
+        .byte 0x60,0x60,0x60,0x60,0x60,0x60,0x60  # movq   $0x0,0x18(%rsp)
+        .byte 0x60,0x60
+        .byte 0x60,0x60,0x60,0x60,0x60,0x60,0x60  # movq   $0x33,0x28(%rsp)
+        .byte 0x60,0x60
+        .byte 0x60,0x60,0x60,0x60,0x60,0x60,0x60  # movq   $0x2b,0x40(%rsp)
+        .byte 0x60,0x60        
+        .byte 0x60,0x60,0x60,0x60,0x60,0x60,0x60  # mov    $0x17,%rax
+        .byte 0x60,0x60                           # syscall
+        .byte 0x60,0x60,0x60,0x60,0x60            # movb   $0x1,0x1(%rsi)
+        .byte 0x60,0x60,0x60                      # mov    %rsp,%rdi
+        .byte 0x60,0x60,0x60,0x60,0x60            # jmpq   
<do_hypervisor_callback+0x20>
 # Hypervisor uses this for application faults while it executes.
 ENTRY(failsafe_callback)
         hlt         
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c 
b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c
--- a/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c  2005-04-22 
13:04:38 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/process.c  2005-04-22 
13:04:38 -04:00
@@ -87,7 +87,9 @@
 extern int set_timeout_timer(void);
 void xen_idle(void)
 {
-       int cpu;
+       int cpu;        

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.