- use symbolics instead of raw numbers (going to help the 2.6.20 port, as those
numbers change there)
- fold instructions where possible
- move fixup table into .rodata
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
Index: sle10sp1-2007-01-31/arch/i386/kernel/entry-xen.S
===================================================================
--- sle10sp1-2007-01-31.orig/arch/i386/kernel/entry-xen.S 2007-01-31
12:51:55.000000000 +0100
+++ sle10sp1-2007-01-31/arch/i386/kernel/entry-xen.S 2007-02-05
11:56:37.000000000 +0100
@@ -747,7 +747,7 @@ ENTRY(hypervisor_callback)
jb 11f
cmpl $sysexit_ecrit,%eax
ja 11f
- addl $0x34,%esp # Remove cs...ebx from stack frame.
+ addl $OLDESP,%esp # Remove eflags...ebx from stack frame.
11: push %esp
call evtchn_do_upcall
add $4,%esp
@@ -777,18 +777,13 @@ ecrit: /**** END OF CRITICAL REGION ***
# provides the number of bytes which have already been popped from the
# interrupted stack frame.
critical_region_fixup:
- addl $critical_fixup_table-scrit,%eax
- movzbl (%eax),%eax # %eax contains num bytes popped
- cmpb $0xff,%al # 0xff => vcpu_info critical region
+ movzbl critical_fixup_table-scrit(%eax),%ecx # %eax contains num bytes
popped
+ cmpb $0xff,%cl # 0xff => vcpu_info critical region
jne 15f
- GET_THREAD_INFO(%ebp)
- xorl %eax,%eax
-15: mov %esp,%esi
- add %eax,%esi # %esi points at end of src region
- mov %esp,%edi
- add $0x34,%edi # %edi points at end of dst region
- mov %eax,%ecx
- shr $2,%ecx # convert words to bytes
+ xorl %ecx,%ecx
+15: leal (%esp,%ecx),%esi # %esi points at end of src region
+ leal OLDESP(%esp),%edi # %edi points at end of dst region
+ shrl $2,%ecx # convert words to bytes
je 17f # skip loop if nothing to copy
16: subl $4,%esi # pre-decrementing copy loop
subl $4,%edi
@@ -798,6 +793,7 @@ critical_region_fixup:
17: movl %edi,%esp # final %edi is top of merged stack
jmp 11b
+.section .rodata,"a"
critical_fixup_table:
.byte 0xff,0xff,0xff # testb $0xff,(%esi) = __TEST_PENDING
.byte 0xff,0xff # jnz 14f
@@ -814,6 +810,7 @@ critical_fixup_table:
.byte 0x28 # iret
.byte 0xff,0xff,0xff,0xff # movb $1,1(%esi)
.byte 0x00,0x00 # jmp 11b
+.previous
# Hypervisor uses this for application faults while it executes.
# We get here for two reasons:
@@ -1194,6 +1191,7 @@ ENTRY(fixup_4gb_segment)
jmp error_code
.section .rodata,"a"
+.align 4
#include "syscall_table.S"
syscall_table_size=(.-sys_call_table)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|