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] [xen-unstable] [IA64] Use virtualized psr in vcpu contex

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Use virtualized psr in vcpu context instead of real psr.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 16 Jun 2007 05:51:58 -0700
Delivery-date: Sat, 16 Jun 2007 05:50:24 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1181682963 21600
# Node ID 171ec463e7ce7673edf1915a5c61420ade4bad1a
# Parent  601509daabfc0f33bae7cc5c07ef620b41c4a7a0
[IA64] Use virtualized psr in vcpu context instead of real psr.

Signed-off-by: Tristan Gingold <tgingold@xxxxxxx>
---
 tools/libxc/ia64/xc_ia64_hvm_build.c     |    6 ++
 tools/libxc/ia64/xc_ia64_linux_restore.c |   12 -----
 tools/libxc/xc_dom_ia64.c                |    6 +-
 xen/arch/ia64/vmx/vlsapic.c              |    7 ---
 xen/arch/ia64/xen/domain.c               |   63 ++++++++++++++-----------------
 xen/arch/ia64/xen/hypercall.c            |    6 --
 xen/arch/ia64/xen/vcpu.c                 |    2 
 7 files changed, 43 insertions(+), 59 deletions(-)

diff -r 601509daabfc -r 171ec463e7ce tools/libxc/ia64/xc_ia64_hvm_build.c
--- a/tools/libxc/ia64/xc_ia64_hvm_build.c      Tue Jun 12 15:07:05 2007 -0600
+++ b/tools/libxc/ia64/xc_ia64_hvm_build.c      Tue Jun 12 15:16:03 2007 -0600
@@ -1,3 +1,4 @@
+#include <asm/kregs.h>
 #include "xg_private.h"
 #include "xenguest.h"
 #include "xc_private.h"
@@ -1083,6 +1084,11 @@ xc_hvm_build(int xc_handle, uint32_t dom
     free(image);
 
     ctxt->regs.ip = 0x80000000ffffffb0UL;
+    ctxt->regs.ar.fpsr = xc_ia64_fpsr_default();
+    ctxt->regs.cr.isr = 1UL << 63;
+    ctxt->regs.psr = IA64_PSR_AC | IA64_PSR_BN;
+    ctxt->regs.cr.dcr = 0;
+    ctxt->regs.cr.pta = 15 << 2;
 
     memset(&launch_domctl, 0, sizeof(launch_domctl));
 
diff -r 601509daabfc -r 171ec463e7ce tools/libxc/ia64/xc_ia64_linux_restore.c
--- a/tools/libxc/ia64/xc_ia64_linux_restore.c  Tue Jun 12 15:07:05 2007 -0600
+++ b/tools/libxc/ia64/xc_ia64_linux_restore.c  Tue Jun 12 15:16:03 2007 -0600
@@ -227,17 +227,7 @@ xc_domain_restore(int xc_handle, int io_
 
     fprintf(stderr, "ip=%016lx, b0=%016lx\n", ctxt.regs.ip, ctxt.regs.b[0]);
 
-    /* First to initialize.  */
-    domctl.cmd = XEN_DOMCTL_setvcpucontext;
-    domctl.domain = (domid_t)dom;
-    domctl.u.vcpucontext.vcpu   = 0;
-    set_xen_guest_handle(domctl.u.vcpucontext.ctxt, &ctxt);
-    if (xc_domctl(xc_handle, &domctl) != 0) {
-        ERROR("Couldn't set vcpu context");
-        goto out;
-    }
-
-    /* Second to set registers...  */
+    /* Initialize and set registers.  */
     ctxt.flags = VGCF_EXTRA_REGS;
     domctl.cmd = XEN_DOMCTL_setvcpucontext;
     domctl.domain = (domid_t)dom;
diff -r 601509daabfc -r 171ec463e7ce tools/libxc/xc_dom_ia64.c
--- a/tools/libxc/xc_dom_ia64.c Tue Jun 12 15:07:05 2007 -0600
+++ b/tools/libxc/xc_dom_ia64.c Tue Jun 12 15:16:03 2007 -0600
@@ -13,6 +13,7 @@
 #include <string.h>
 #include <inttypes.h>
 #include <assert.h>
+#include <asm/kregs.h>
 
 #include <xen/xen.h>
 #include <xen/foreign/ia64.h>
@@ -106,9 +107,10 @@ static int vcpu_ia64(struct xc_dom_image
     memset(ctxt, 0, sizeof(*ctxt));
 
     ctxt->flags = 0;
-    ctxt->regs.psr = 0;        /* all necessary bits filled by hypervisor */
+    /* PSR is set according to SAL 3.2.4: AC, IC and BN are set. */
+    ctxt->regs.psr = IA64_PSR_AC | IA64_PSR_IC | IA64_PSR_BN;
     ctxt->regs.ip = dom->parms.virt_entry;
-    ctxt->regs.cfm = (uint64_t) 1 << 63;
+    ctxt->regs.cfm = 1UL << 63;
 #ifdef __ia64__                        /* FIXME */
     ctxt->regs.ar.fpsr = xc_ia64_fpsr_default();
 #endif
diff -r 601509daabfc -r 171ec463e7ce xen/arch/ia64/vmx/vlsapic.c
--- a/xen/arch/ia64/vmx/vlsapic.c       Tue Jun 12 15:07:05 2007 -0600
+++ b/xen/arch/ia64/vmx/vlsapic.c       Tue Jun 12 15:16:03 2007 -0600
@@ -696,11 +696,8 @@ static void vlsapic_write_ipi(VCPU *vcpu
         test_bit(_VPF_down, &targ->pause_flags)) {
 
         struct pt_regs *targ_regs = vcpu_regs(targ);
-        struct vcpu_guest_context c;
-
-        memset (&c, 0, sizeof(c));
-
-        if (arch_set_info_guest(targ, &c) != 0) {
+
+        if (arch_set_info_guest(targ, NULL) != 0) {
             printk("arch_boot_vcpu: failure\n");
             return;
         }
diff -r 601509daabfc -r 171ec463e7ce xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Tue Jun 12 15:07:05 2007 -0600
+++ b/xen/arch/ia64/xen/domain.c        Tue Jun 12 15:16:03 2007 -0600
@@ -622,12 +622,10 @@ void arch_get_info_guest(struct vcpu *v,
        c.nat->regs.r[10] = uregs->r10;
        c.nat->regs.r[11] = uregs->r11;
 
-       if (is_hvm) {
-               c.nat->regs.psr = vmx_vcpu_get_psr (v);
-       } else {
-               /* FIXME: get the vpsr.  */
-               c.nat->regs.psr = uregs->cr_ipsr;
-       }
+       if (is_hvm)
+               c.nat->regs.psr = vmx_vcpu_get_psr(v);
+       else
+               c.nat->regs.psr = vcpu_get_psr(v);
 
        c.nat->regs.ip = uregs->cr_iip;
        c.nat->regs.cfm = uregs->cr_ifs;
@@ -717,6 +715,26 @@ int arch_set_info_guest(struct vcpu *v, 
        struct domain *d = v->domain;
        int rc;
 
+       /* Finish vcpu initialization.  */
+       if (!v->is_initialised) {
+               if (d->arch.is_vti)
+                       rc = vmx_final_setup_guest(v);
+               else
+                       rc = vcpu_late_initialise(v);
+               if (rc != 0)
+                       return rc;
+
+               vcpu_init_regs(v);
+
+               v->is_initialised = 1;
+               /* Auto-online VCPU0 when it is initialised. */
+               if (v->vcpu_id == 0)
+                       clear_bit(_VPF_down, &v->pause_flags);
+       }
+
+       if (c.nat == NULL)
+               return 0;
+
        uregs->b6 = c.nat->regs.b[6];
        uregs->b7 = c.nat->regs.b[7];
        
@@ -727,8 +745,11 @@ int arch_set_info_guest(struct vcpu *v, 
        uregs->r9 = c.nat->regs.r[9];
        uregs->r10 = c.nat->regs.r[10];
        uregs->r11 = c.nat->regs.r[11];
-       
-       uregs->cr_ipsr = c.nat->regs.psr;
+
+       if (!d->arch.is_vti)
+               vcpu_set_psr(v, c.nat->regs.psr);
+       else
+               vmx_vcpu_set_psr(v, c.nat->regs.psr);
        uregs->cr_iip = c.nat->regs.ip;
        uregs->cr_ifs = c.nat->regs.cfm;
        
@@ -813,32 +834,6 @@ int arch_set_info_guest(struct vcpu *v, 
                v->arch.iva = c.nat->regs.cr.iva;
        }
 
-       if (v->is_initialised)
-               return 0;
-
-       if (d->arch.is_vti) {
-               rc = vmx_final_setup_guest(v);
-               if (rc != 0)
-                       return rc;
-       } else {
-               rc = vcpu_late_initialise(v);
-               if (rc != 0)
-                       return rc;
-               VCPU(v, interrupt_mask_addr) = 
-                       (unsigned char *) d->arch.shared_info_va +
-                       INT_ENABLE_OFFSET(v);
-       }
-
-       /* This overrides some registers. */
-       vcpu_init_regs(v);
-
-       if (!v->is_initialised) {
-               v->is_initialised = 1;
-               /* Auto-online VCPU0 when it is initialised. */
-               if (v->vcpu_id == 0)
-                       clear_bit(_VPF_down, &v->pause_flags);
-       }
-
        return 0;
 }
 
diff -r 601509daabfc -r 171ec463e7ce xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c     Tue Jun 12 15:07:05 2007 -0600
+++ b/xen/arch/ia64/xen/hypercall.c     Tue Jun 12 15:16:03 2007 -0600
@@ -86,11 +86,7 @@ fw_hypercall_ipi (struct pt_regs *regs)
 
                /* First start: initialize vpcu.  */
                if (!targ->is_initialised) {
-                       struct vcpu_guest_context c;
-               
-                       memset (&c, 0, sizeof (c));
-
-                       if (arch_set_info_guest (targ, &c) != 0) {
+                       if (arch_set_info_guest (targ, NULL) != 0) {
                                printk ("arch_boot_vcpu: failure\n");
                                return;
                        }
diff -r 601509daabfc -r 171ec463e7ce xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Tue Jun 12 15:07:05 2007 -0600
+++ b/xen/arch/ia64/xen/vcpu.c  Tue Jun 12 15:16:03 2007 -0600
@@ -182,8 +182,6 @@ void vcpu_init_regs(struct vcpu *v)
                    INT_ENABLE_OFFSET(v);
                VCPU(v, itv) = (1 << 16);       /* timer vector masked */
 
-               /* SAL specification 3.2.4 */
-               VCPU(v, vpsr) = IA64_PSR_AC | IA64_PSR_IC | IA64_PSR_BN;
                v->vcpu_info->evtchn_upcall_pending = 0;
                v->vcpu_info->evtchn_upcall_mask = -1;
        }

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] Use virtualized psr in vcpu context instead of real psr., Xen patchbot-unstable <=