ia64/xen-unstable

changeset 313:f110f9431b9f

bitkeeper revision 1.135 (3e737ed4L7wnPRiGFSAKK9h8kyXTOw)

entry.S:
Fixed another assembly-language bug. We weren't saving a register across a C function call.
author kaf24@scramble.cl.cam.ac.uk
date Sat Mar 15 19:28:20 2003 +0000 (2003-03-15)
parents f4b678a52812
children 48cd5a789e4b
files xen/arch/i386/entry.S
line diff
     1.1 --- a/xen/arch/i386/entry.S	Sat Mar 15 19:00:43 2003 +0000
     1.2 +++ b/xen/arch/i386/entry.S	Sat Mar 15 19:28:20 2003 +0000
     1.3 @@ -270,21 +270,18 @@ ret_from_hypervisor_call:
     1.4          movl %eax,EAX(%esp)		# save the return value
     1.5  
     1.6  test_all_events:
     1.7 -        mov  PROCESSOR(%ebx),%eax
     1.8 -        shl  $4,%eax                    # sizeof(guest_trapo_bounce) == 16
     1.9 -        lea  guest_trap_bounce(%eax),%edx
    1.10 -        cli                             # tests must not race interrupts
    1.11          xorl %ecx,%ecx
    1.12          notl %ecx
    1.13 -test_softirqs:  
    1.14 +        cli                             # tests must not race interrupts
    1.15 +/*test_softirqs:*/  
    1.16          mov  PROCESSOR(%ebx),%eax
    1.17          shl  $6,%eax                    # sizeof(irq_cpustat) == 64
    1.18          test %ecx,SYMBOL_NAME(irq_stat)(%eax,1)
    1.19          jnz  process_softirqs
    1.20 -test_hyp_events:        
    1.21 +/*test_hyp_events:*/
    1.22          test %ecx, HYP_EVENTS(%ebx)
    1.23          jnz  process_hyp_events
    1.24 -test_guest_events:      
    1.25 +/*test_guest_events:*/
    1.26          movl SHARED_INFO(%ebx),%eax
    1.27          test %ecx,EVENTS(%eax)
    1.28          jz   restore_all
    1.29 @@ -293,8 +290,11 @@ test_guest_events:
    1.30          /* Prevent unnecessary reentry of event callback (stack overflow!) */
    1.31          xorl %ecx,%ecx
    1.32          movl %ecx,EVENTS_ENABLE(%eax)      
    1.33 -/* %eax == shared_info, %ebx == task_struct, %edx == guest_trap_bounce */
    1.34 +/* %eax == shared_info, %ebx == task_struct */
    1.35  process_guest_events:   
    1.36 +        mov  PROCESSOR(%ebx),%edx
    1.37 +        shl  $4,%edx                    # sizeof(guest_trap_bounce) == 16
    1.38 +        lea  guest_trap_bounce(%edx),%edx
    1.39          movl EVENT_ADDR(%eax),%eax
    1.40          movl %eax,GTB_EIP(%edx)
    1.41          movw $__GUEST_CS,GTB_CS(%edx)
    1.42 @@ -302,11 +302,10 @@ process_guest_events:
    1.43          jmp  restore_all
    1.44  
    1.45          ALIGN
    1.46 -process_softirqs:       
    1.47 -        push %edx
    1.48 +process_softirqs:
    1.49 +        sti       
    1.50          call SYMBOL_NAME(do_softirq)
    1.51 -        pop  %edx
    1.52 -        jmp  test_hyp_events
    1.53 +        jmp  test_all_events
    1.54          
    1.55          ALIGN
    1.56  process_hyp_events: