summary refs log tree commit diff
diff options
context:
space:
mode:
authorJes Sorensen <jes@sgi.com>2007-10-22 11:03:29 +1000
committerRusty Russell <rusty@rustcorp.com.au>2007-10-23 15:49:51 +1000
commit4614a3a3b638dfd7a67d0237944f6a76331af61d (patch)
tree8ec25721127eb899b97e46551b1644644ca698ac
parent625efab1cd3d4da4634dfe26df6b4005385397e2 (diff)
downloadlinux-4614a3a3b638dfd7a67d0237944f6a76331af61d.tar.gz
Reorder guest saved regs to match hyperall order
Move eax next to ebx/ecx/edx in struct lguest_regs on i386, so they
will be located together and allow it to map directly to a struct
hcall_ring entry (which will be renamed struct hcall_args as in a
subsequent patch).

This is in preparation for making the code hcall code architecture
independent.

Signed-off-by: Jes Sorensen <jes@sgi.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--drivers/lguest/x86/switcher_32.S4
-rw-r--r--include/asm-x86/lguest.h3
2 files changed, 3 insertions, 4 deletions
diff --git a/drivers/lguest/x86/switcher_32.S b/drivers/lguest/x86/switcher_32.S
index e66cec5ac240..1010b90b11fc 100644
--- a/drivers/lguest/x86/switcher_32.S
+++ b/drivers/lguest/x86/switcher_32.S
@@ -133,6 +133,7 @@ ENTRY(switch_to_guest)
 	// The Guest's register page has been mapped
 	// Writable onto our %esp (stack) --
 	// We can simply pop off all Guest regs.
+	popl	%eax
 	popl	%ebx
 	popl	%ecx
 	popl	%edx
@@ -140,7 +141,6 @@ ENTRY(switch_to_guest)
 	popl	%edi
 	popl	%ebp
 	popl	%gs
-	popl	%eax
 	popl	%fs
 	popl	%ds
 	popl	%es
@@ -168,7 +168,6 @@ ENTRY(switch_to_guest)
 	pushl	%es;							\
 	pushl	%ds;							\
 	pushl	%fs;							\
-	pushl	%eax;							\
 	pushl	%gs;							\
 	pushl	%ebp;							\
 	pushl	%edi;							\
@@ -176,6 +175,7 @@ ENTRY(switch_to_guest)
 	pushl	%edx;							\
 	pushl	%ecx;							\
 	pushl	%ebx;							\
+	pushl	%eax;							\
 	/* Our stack and our code are using segments			\
 	 * Set in the TSS and IDT					\
 	 * Yet if we were to touch data we'd use			\
diff --git a/include/asm-x86/lguest.h b/include/asm-x86/lguest.h
index f10f1c6cc3d1..ccd338460811 100644
--- a/include/asm-x86/lguest.h
+++ b/include/asm-x86/lguest.h
@@ -26,10 +26,9 @@ extern unsigned long default_idt_entries[];
 struct lguest_regs
 {
 	/* Manually saved part. */
-	unsigned long ebx, ecx, edx;
+	unsigned long eax, ebx, ecx, edx;
 	unsigned long esi, edi, ebp;
 	unsigned long gs;
-	unsigned long eax;
 	unsigned long fs, ds, es;
 	unsigned long trapnum, errcode;
 	/* Trap pushed part */