aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_dom_x86.c
diff options
context:
space:
mode:
authorHollis Blanchard <hollisb@us.ibm.com>2007-03-21 18:08:31 -0500
committerHollis Blanchard <hollisb@us.ibm.com>2007-03-21 18:08:31 -0500
commit001e8c5cd8f60e7cafbfed9869862db46b5ed473 (patch)
tree7ac30f8387c3f66c1860ea9421e0a681bb4b4b7f /tools/libxc/xc_dom_x86.c
parenta7706a8de0119f07b6f7e014a78fd07947af3787 (diff)
parent5b3327347f83a473755b00a76ff1176dc6cda301 (diff)
downloadxen-001e8c5cd8f60e7cafbfed9869862db46b5ed473.tar.gz
xen-001e8c5cd8f60e7cafbfed9869862db46b5ed473.tar.bz2
xen-001e8c5cd8f60e7cafbfed9869862db46b5ed473.zip
Merge with xen-unstable.hg.
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
Diffstat (limited to 'tools/libxc/xc_dom_x86.c')
-rw-r--r--tools/libxc/xc_dom_x86.c34
1 files changed, 6 insertions, 28 deletions
diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
index 0641078f9c..6a71cec811 100644
--- a/tools/libxc/xc_dom_x86.c
+++ b/tools/libxc/xc_dom_x86.c
@@ -434,24 +434,12 @@ static int vcpu_x86_32(struct xc_dom_image *dom, void *ptr)
{
vcpu_guest_context_x86_32_t *ctxt = ptr;
xen_pfn_t cr3_pfn;
- int i;
xc_dom_printf("%s: called\n", __FUNCTION__);
/* clear everything */
memset(ctxt, 0, sizeof(*ctxt));
- /* Virtual IDT is empty at start-of-day. */
- for ( i = 0; i < 256; i++ )
- {
- ctxt->trap_ctxt[i].vector = i;
- ctxt->trap_ctxt[i].cs = FLAT_KERNEL_CS_X86_32;
- }
-
- /* No callback handlers. */
- ctxt->event_callback_cs = FLAT_KERNEL_CS_X86_32;
- ctxt->failsafe_callback_cs = FLAT_KERNEL_CS_X86_32;
-
ctxt->user_regs.ds = FLAT_KERNEL_DS_X86_32;
ctxt->user_regs.es = FLAT_KERNEL_DS_X86_32;
ctxt->user_regs.fs = FLAT_KERNEL_DS_X86_32;
@@ -465,11 +453,10 @@ static int vcpu_x86_32(struct xc_dom_image *dom, void *ptr)
dom->parms.virt_base + (dom->start_info_pfn) * PAGE_SIZE_X86;
ctxt->user_regs.eflags = 1 << 9; /* Interrupt Enable */
- ctxt->kernel_ss = FLAT_KERNEL_SS_X86_32;
- ctxt->kernel_sp =
- dom->parms.virt_base + (dom->bootstack_pfn + 1) * PAGE_SIZE_X86;
+ ctxt->kernel_ss = ctxt->user_regs.ss;
+ ctxt->kernel_sp = ctxt->user_regs.esp;
- ctxt->flags = VGCF_in_kernel_X86_32;
+ ctxt->flags = VGCF_in_kernel_X86_32 | VGCF_online_X86_32;
if ( dom->parms.pae == 2 /* extended_cr3 */ ||
dom->parms.pae == 3 /* bimodal */ )
ctxt->vm_assist |= (1UL << VMASST_TYPE_pae_extended_cr3);
@@ -486,20 +473,12 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
{
vcpu_guest_context_x86_64_t *ctxt = ptr;
xen_pfn_t cr3_pfn;
- int i;
xc_dom_printf("%s: called\n", __FUNCTION__);
/* clear everything */
memset(ctxt, 0, sizeof(*ctxt));
- /* Virtual IDT is empty at start-of-day. */
- for ( i = 0; i < 256; i++ )
- {
- ctxt->trap_ctxt[i].vector = i;
- ctxt->trap_ctxt[i].cs = FLAT_KERNEL_CS_X86_64;
- }
-
ctxt->user_regs.ds = FLAT_KERNEL_DS_X86_64;
ctxt->user_regs.es = FLAT_KERNEL_DS_X86_64;
ctxt->user_regs.fs = FLAT_KERNEL_DS_X86_64;
@@ -513,11 +492,10 @@ static int vcpu_x86_64(struct xc_dom_image *dom, void *ptr)
dom->parms.virt_base + (dom->start_info_pfn) * PAGE_SIZE_X86;
ctxt->user_regs.rflags = 1 << 9; /* Interrupt Enable */
- ctxt->kernel_ss = FLAT_KERNEL_SS_X86_64;
- ctxt->kernel_sp =
- dom->parms.virt_base + (dom->bootstack_pfn + 1) * PAGE_SIZE_X86;
+ ctxt->kernel_ss = ctxt->user_regs.ss;
+ ctxt->kernel_sp = ctxt->user_regs.esp;
- ctxt->flags = VGCF_in_kernel_X86_64;
+ ctxt->flags = VGCF_in_kernel_X86_64 | VGCF_online_X86_64;
cr3_pfn = xc_dom_p2m_guest(dom, dom->pgtables_seg.pfn);
ctxt->ctrlreg[3] = xen_pfn_to_cr3_x86_64(cr3_pfn);
xc_dom_printf("%s: cr3: pfn 0x%" PRIpfn " mfn 0x%" PRIpfn "\n",