WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Avoid field duplication between vcpu_guest_context and a

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Avoid field duplication between vcpu_guest_context and arch_exec_domain
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Thu, 28 Apr 2005 18:04:45 +0000
Delivery-date: Thu, 28 Apr 2005 19:04:01 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1393, 2005/04/28 19:04:45+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Avoid field duplication between vcpu_guest_context and arch_exec_domain
        structures. The latter now includes the former as a sub-field.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c |    6 
 linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S |    6 
 tools/libxc/xc_linux_build.c                           |    6 
 tools/libxc/xc_plan9_build.c                           |    4 
 tools/libxc/xc_vmx_build.c                             |    8 
 xen/arch/x86/dom0_ops.c                                |   48 +---
 xen/arch/x86/domain.c                                  |  176 +++++++----------
 xen/arch/x86/domain_build.c                            |    9 
 xen/arch/x86/i387.c                                    |    8 
 xen/arch/x86/mm.c                                      |   10 
 xen/arch/x86/traps.c                                   |   46 ++--
 xen/arch/x86/vmx.c                                     |    8 
 xen/arch/x86/x86_32/asm-offsets.c                      |   18 +
 xen/arch/x86/x86_32/mm.c                               |    4 
 xen/arch/x86/x86_32/seg_fixup.c                        |    6 
 xen/arch/x86/x86_32/traps.c                            |   12 -
 xen/arch/x86/x86_64/asm-offsets.c                      |   12 -
 xen/arch/x86/x86_64/entry.S                            |    6 
 xen/arch/x86/x86_64/mm.c                               |   13 -
 xen/arch/x86/x86_64/traps.c                            |    6 
 xen/include/asm-x86/domain.h                           |   32 ---
 xen/include/asm-x86/ldt.h                              |    2 
 xen/include/asm-x86/processor.h                        |   16 -
 xen/include/asm-x86/x86_64/current.h                   |    6 
 xen/include/public/arch-x86_32.h                       |   21 +-
 xen/include/public/arch-x86_64.h                       |   36 +--
 26 files changed, 231 insertions(+), 294 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c 
b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c
--- a/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c    2005-04-28 
15:04:24 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/i386/kernel/smpboot.c    2005-04-28 
15:04:24 -04:00
@@ -876,7 +876,7 @@
        ctxt.user_regs.eflags = (1<<9) | (1<<2) | (idle->thread.io_pl<<12);
 
        /* FPU is set up to default initial state. */
-       memset(ctxt.fpu_ctxt, 0, sizeof(ctxt.fpu_ctxt));
+       memset(&ctxt.fpu_ctxt, 0, sizeof(ctxt.fpu_ctxt));
 
        /* Virtual IDT is empty at start-of-day. */
        for ( i = 0; i < 256; i++ )
@@ -903,8 +903,8 @@
        }
 
        /* Ring 1 stack is the initial stack. */
-       ctxt.kernel_ss  = __KERNEL_DS;
-       ctxt.kernel_esp = idle->thread.esp;
+       ctxt.kernel_ss = __KERNEL_DS;
+       ctxt.kernel_sp = idle->thread.esp;
 
        /* Callback handlers. */
        ctxt.event_callback_cs     = __KERNEL_CS;
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-28 
15:04:24 -04:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/x86_64/kernel/entry.S    2005-04-28 
15:04:25 -04:00
@@ -50,7 +50,7 @@
 
 
 EVENT_MASK      = (CS+4)
-ECF_IN_SYSCALL  = (1<<8)
+VGCF_IN_SYSCALL = (1<<8)
         
 /*
  * Copied from arch/xen/i386/kernel/entry.S
@@ -169,7 +169,7 @@
          *     struct switch_to_user {
          *        u64 rax, r11, rcx, flags, rip, cs, rflags, rsp, ss;
          *     } PACKED;
-         * #define ECF_IN_SYSCALL (1<<8) 
+         * #define VGCF_IN_SYSCALL (1<<8) 
          */
         .macro SWITCH_TO_USER flag
         movl $0,%gs:pda_kernel_mode     # change to user mode
@@ -275,7 +275,7 @@
        jnz  sysret_careful 
         XEN_UNBLOCK_EVENTS(%rsi)                
        RESTORE_ARGS 0,8,0
-        SWITCH_TO_USER ECF_IN_SYSCALL
+        SWITCH_TO_USER VGCF_IN_SYSCALL
 
        /* Handle reschedules */
        /* edx: work, edi: workmask */  
diff -Nru a/tools/libxc/xc_linux_build.c b/tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      2005-04-28 15:04:24 -04:00
+++ b/tools/libxc/xc_linux_build.c      2005-04-28 15:04:24 -04:00
@@ -412,7 +412,7 @@
     ctxt->user_regs.eflags = (1<<9) | (1<<2);
 
     /* FPU is set up to default initial state. */
-    memset(ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
+    memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
 
     /* Virtual IDT is empty at start-of-day. */
     for ( i = 0; i < 256; i++ )
@@ -432,8 +432,8 @@
     ctxt->gdt_ents = 0;
 
     /* Ring 1 stack is the initial stack. */
-    ctxt->kernel_ss  = FLAT_KERNEL_DS;
-    ctxt->kernel_esp = vstartinfo_start + 2*PAGE_SIZE;
+    ctxt->kernel_ss = FLAT_KERNEL_DS;
+    ctxt->kernel_sp = vstartinfo_start + 2*PAGE_SIZE;
 
     /* No debugging. */
     memset(ctxt->debugreg, 0, sizeof(ctxt->debugreg));
diff -Nru a/tools/libxc/xc_plan9_build.c b/tools/libxc/xc_plan9_build.c
--- a/tools/libxc/xc_plan9_build.c      2005-04-28 15:04:24 -04:00
+++ b/tools/libxc/xc_plan9_build.c      2005-04-28 15:04:24 -04:00
@@ -498,7 +498,7 @@
        ctxt->user_regs.eflags = (1 << 9) | (1 << 2);
 
        /* FPU is set up to default initial state. */
-       memset(ctxt->fpu_ctxt, 0, sizeof (ctxt->fpu_ctxt));
+       memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
 
        /* Virtual IDT is empty at start-of-day. */
        for (i = 0; i < 256; i++) {
@@ -519,7 +519,7 @@
        /* Ring 1 stack is the initial stack. */
        /* put stack at top of second page */
        ctxt->kernel_ss = FLAT_KERNEL_DS;
-       ctxt->kernel_esp = ctxt->user_regs.esp;
+       ctxt->kernel_sp = ctxt->user_regs.esp;
 
        /* No debugging. */
        memset(ctxt->debugreg, 0, sizeof (ctxt->debugreg));
diff -Nru a/tools/libxc/xc_vmx_build.c b/tools/libxc/xc_vmx_build.c
--- a/tools/libxc/xc_vmx_build.c        2005-04-28 15:04:24 -04:00
+++ b/tools/libxc/xc_vmx_build.c        2005-04-28 15:04:24 -04:00
@@ -565,9 +565,9 @@
     if ( image != NULL )
         free(image);
 
-    ctxt->flags = ECF_VMX_GUEST;
+    ctxt->flags = VGCF_VMX_GUEST;
     /* FPU is set up to default initial state. */
-    memset(ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
+    memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
 
     /* Virtual IDT is empty at start-of-day. */
     for ( i = 0; i < 256; i++ )
@@ -588,8 +588,8 @@
 
     /* Ring 1 stack is the initial stack. */
 /*
-    ctxt->kernel_ss  = FLAT_KERNEL_DS;
-    ctxt->kernel_esp = vstartinfo_start;
+    ctxt->kernel_ss = FLAT_KERNEL_DS;
+    ctxt->kernel_sp = vstartinfo_start;
 */
     /* No debugging. */
     memset(ctxt->debugreg, 0, sizeof(ctxt->debugreg));
diff -Nru a/xen/arch/x86/dom0_ops.c b/xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c   2005-04-28 15:04:24 -04:00
+++ b/xen/arch/x86/dom0_ops.c   2005-04-28 15:04:24 -04:00
@@ -383,10 +383,8 @@
 #endif
 #endif
 
-    c->flags = 0;
-    memcpy(&c->user_regs, 
-           &ed->arch.user_regs,
-           sizeof(ed->arch.user_regs));
+    memcpy(c, &ed->arch.guest_context, sizeof(*c));
+
     /* IOPL privileges are virtualised -- merge back into returned eflags. */
     BUG_ON((c->user_regs.eflags & EF_IOPL) != 0);
     c->user_regs.eflags |= ed->arch.iopl << 12;
@@ -398,30 +396,22 @@
 #endif
 #endif
 
+    c->flags = 0;
     if ( test_bit(EDF_DONEFPUINIT, &ed->ed_flags) )
-        c->flags |= ECF_I387_VALID;
-    if ( KERNEL_MODE(ed, &ed->arch.user_regs) )
-        c->flags |= ECF_IN_KERNEL;
+        c->flags |= VGCF_I387_VALID;
+    if ( KERNEL_MODE(ed, &ed->arch.guest_context.user_regs) )
+        c->flags |= VGCF_IN_KERNEL;
 #ifdef CONFIG_VMX
     if (VMX_DOMAIN(ed))
-        c->flags |= ECF_VMX_GUEST;
+        c->flags |= VGCF_VMX_GUEST;
 #endif
-    memcpy(&c->fpu_ctxt,
-           &ed->arch.i387,
-           sizeof(ed->arch.i387));
-    memcpy(&c->trap_ctxt,
-           ed->arch.traps,
-           sizeof(ed->arch.traps));
+
 #ifdef ARCH_HAS_FAST_TRAP
     if ( (ed->arch.fast_trap_desc.a == 0) &&
          (ed->arch.fast_trap_desc.b == 0) )
         c->fast_trap_idx = 0;
-    else
-        c->fast_trap_idx = 
-            ed->arch.fast_trap_idx;
 #endif
-    c->ldt_base = ed->arch.ldt_base;
-    c->ldt_ents = ed->arch.ldt_ents;
+
     c->gdt_ents = 0;
     if ( GET_GDT_ADDRESS(ed) == GDT_VIRT_START(ed) )
     {
@@ -430,22 +420,8 @@
                 l1e_get_pfn(ed->arch.perdomain_ptes[i]);
         c->gdt_ents = GET_GDT_ENTRIES(ed);
     }
-    c->kernel_ss  = ed->arch.kernel_ss;
-    c->kernel_esp = ed->arch.kernel_sp;
-    c->pt_base   = 
-        pagetable_val(ed->arch.guest_table);
-    memcpy(c->debugreg, 
-           ed->arch.debugreg, 
-           sizeof(ed->arch.debugreg));
-#if defined(__i386__)
-    c->event_callback_cs     = ed->arch.event_selector;
-    c->event_callback_eip    = ed->arch.event_address;
-    c->failsafe_callback_cs  = ed->arch.failsafe_selector;
-    c->failsafe_callback_eip = ed->arch.failsafe_address;
-#elif defined(__x86_64__)
-    c->event_callback_eip    = ed->arch.event_address;
-    c->failsafe_callback_eip = ed->arch.failsafe_address;
-    c->syscall_callback_eip  = ed->arch.syscall_address;
-#endif
+
+    c->pt_base = pagetable_val(ed->arch.guest_table);
+
     c->vm_assist = ed->domain->vm_assist;
 }
diff -Nru a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     2005-04-28 15:04:24 -04:00
+++ b/xen/arch/x86/domain.c     2005-04-28 15:04:24 -04:00
@@ -385,65 +385,42 @@
      * #GP. If DS, ES, FS, GS are DPL 0 then they'll be cleared automatically.
      * If SS RPL or DPL differs from CS RPL then we'll #GP.
      */
-    if (!(c->flags & ECF_VMX_GUEST)) 
+    if ( !(c->flags & VGCF_VMX_GUEST) )
+    {
         if ( ((c->user_regs.cs & 3) == 0) ||
              ((c->user_regs.ss & 3) == 0) )
                 return -EINVAL;
+    }
 
     clear_bit(EDF_DONEFPUINIT, &ed->ed_flags);
-    if ( c->flags & ECF_I387_VALID )
+    if ( c->flags & VGCF_I387_VALID )
         set_bit(EDF_DONEFPUINIT, &ed->ed_flags);
 
     ed->arch.flags &= ~TF_kernel_mode;
-    if ( c->flags & ECF_IN_KERNEL )
+    if ( c->flags & VGCF_IN_KERNEL )
         ed->arch.flags |= TF_kernel_mode;
 
-    memcpy(&ed->arch.user_regs,
-           &c->user_regs,
-           sizeof(ed->arch.user_regs));
-
-    memcpy(&ed->arch.i387,
-           &c->fpu_ctxt,
-           sizeof(ed->arch.i387));
+    memcpy(&ed->arch.guest_context, c, sizeof(*c));
 
     /* IOPL privileges are virtualised. */
-    ed->arch.iopl = (ed->arch.user_regs.eflags >> 12) & 3;
-    ed->arch.user_regs.eflags &= ~EF_IOPL;
+    ed->arch.iopl = (ed->arch.guest_context.user_regs.eflags >> 12) & 3;
+    ed->arch.guest_context.user_regs.eflags &= ~EF_IOPL;
 
     /* Clear IOPL for unprivileged domains. */
-    if (!IS_PRIV(d))
-        ed->arch.user_regs.eflags &= 0xffffcfff;
+    if ( !IS_PRIV(d) )
+        ed->arch.guest_context.user_regs.eflags &= 0xffffcfff;
 
-    if (test_bit(EDF_DONEINIT, &ed->ed_flags))

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Avoid field duplication between vcpu_guest_context and arch_exec_domain, BitKeeper Bot <=