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] Restructure metaphysical mode rid management to ensure e

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Restructure metaphysical mode rid management to ensure easy
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Thu, 26 May 2005 21:28:39 +0000
Delivery-date: Fri, 10 Jun 2005 18:01:40 +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.1564.1.4, 2005/05/26 15:28:39-06:00, djm@xxxxxxxxxxxxxxx

        Restructure metaphysical mode rid management to ensure easy
        accessibility from rsm/ssm psr.dt hyperprivops.
        
        Signed-off by: Dan Magenheimer <dan.magenheimer@xxxxxx>



 arch/ia64/asm-offsets.c   |    4 ++++
 arch/ia64/domain.c        |    4 +++-
 arch/ia64/regionreg.c     |   26 +++++++++++++-------------
 arch/ia64/vcpu.c          |    8 +++++++-
 include/asm-ia64/domain.h |    5 +++--
 5 files changed, 30 insertions(+), 17 deletions(-)


diff -Nru a/xen/arch/ia64/asm-offsets.c b/xen/arch/ia64/asm-offsets.c
--- a/xen/arch/ia64/asm-offsets.c       2005-06-10 14:02:35 -04:00
+++ b/xen/arch/ia64/asm-offsets.c       2005-06-10 14:02:35 -04:00
@@ -51,6 +51,7 @@
        DEFINE(XSI_METAPHYS_OFS, offsetof(vcpu_info_t, arch.metaphysical_mode));
        DEFINE(XSI_INCOMPL_REG_OFS, offsetof(vcpu_info_t, 
arch.incomplete_regframe));
        DEFINE(XSI_PEND_OFS, offsetof(vcpu_info_t, arch.pending_interruption));
+       DEFINE(XSI_RR0_OFS, offsetof(vcpu_info_t, arch.rrs[0]));
        //DEFINE(IA64_TASK_BLOCKED_OFFSET,offsetof (struct task_struct, 
blocked));
        //DEFINE(IA64_TASK_CLEAR_CHILD_TID_OFFSET,offsetof (struct task_struct, 
clear_child_tid));
        //DEFINE(IA64_TASK_GROUP_LEADER_OFFSET, offsetof (struct task_struct, 
group_leader));
@@ -62,6 +63,9 @@
        //DEFINE(IA64_TASK_TGID_OFFSET, offsetof (struct task_struct, tgid));
        DEFINE(IA64_TASK_THREAD_KSP_OFFSET, offsetof (struct exec_domain, 
arch._thread.ksp));
        DEFINE(IA64_TASK_THREAD_ON_USTACK_OFFSET, offsetof (struct exec_domain, 
arch._thread.on_ustack));
+
+       DEFINE(IA64_VCPU_META_RR0_OFFSET, offsetof (struct exec_domain, 
arch.metaphysical_rr0));
+       DEFINE(IA64_VCPU_META_SAVED_RR0_OFFSET, offsetof (struct exec_domain, 
arch.metaphysical_saved_rr0));
 
        BLANK();
 
diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c    2005-06-10 14:02:35 -04:00
+++ b/xen/arch/ia64/domain.c    2005-06-10 14:02:35 -04:00
@@ -244,9 +244,11 @@
        }
 #endif
        d->max_pages = (128*1024*1024)/PAGE_SIZE; // 128MB default // FIXME
-       if ((d->metaphysical_rid = allocate_metaphysical_rid()) == -1UL)
+       if ((d->arch.metaphysical_rr0 = allocate_metaphysical_rr0()) == -1UL)
                BUG();
        ed->vcpu_info->arch.metaphysical_mode = 1;
+       ed->arch.metaphysical_rr0 = d->arch.metaphysical_rr0;
+       ed->arch.metaphysical_saved_rr0 = d->arch.metaphysical_rr0;
 #define DOMAIN_RID_BITS_DEFAULT 18
        if (!allocate_rid_range(d,DOMAIN_RID_BITS_DEFAULT)) // FIXME
                BUG();
diff -Nru a/xen/arch/ia64/regionreg.c b/xen/arch/ia64/regionreg.c
--- a/xen/arch/ia64/regionreg.c 2005-06-10 14:02:36 -04:00
+++ b/xen/arch/ia64/regionreg.c 2005-06-10 14:02:36 -04:00
@@ -63,9 +63,14 @@
 
 
 // returns -1 if none available
-unsigned long allocate_metaphysical_rid(void)
+unsigned long allocate_metaphysical_rr0(void)
 {
-       unsigned long rid = allocate_reserved_rid();
+       ia64_rr rrv;
+
+       rrv.rid = allocate_reserved_rid();
+       rrv.ps = PAGE_SHIFT;
+       rrv.ve = 0;
+       return rrv.rrval;
 }
 
 int deallocate_metaphysical_rid(unsigned long rid)
@@ -282,22 +287,20 @@
                if (rreg == 6) newrrv.ve = VHPT_ENABLED_REGION_7;
                else newrrv.ve = VHPT_ENABLED_REGION_0_TO_6;
                newrrv.ps = PAGE_SHIFT;
+               if (rreg == 0) ed->arch.metaphysical_saved_rr0 = newrrv.rrval;
                set_rr(rr,newrrv.rrval);
        }
        return 1;
 }
 
 // set rr0 to the passed rid (for metaphysical mode so don't use domain offset
-int set_metaphysical_rr(unsigned long rr, unsigned long rid)
+int set_metaphysical_rr0(void)
 {
+       struct exec_domain *ed = current;
        ia64_rr rrv;
        
-       rrv.rrval = 0;
-       rrv.rid = rid;
-       rrv.ps = PAGE_SHIFT;
 //     rrv.ve = 1;     FIXME: TURN ME BACK ON WHEN VHPT IS WORKING
-       rrv.ve = 0;
-       set_rr(rr,rrv.rrval);
+       set_rr(0,ed->arch.metaphysical_rr0);
 }
 
 // validates/changes region registers 0-6 in the currently executing domain
@@ -321,8 +324,7 @@
 {
        ia64_rr rrv;
 
-       rrv.rrval = 0;
-       rrv.rid = ed->domain->metaphysical_rid;
+       rrv.rrval = ed->domain->arch.metaphysical_rr0;
        rrv.ps = PAGE_SHIFT;
        rrv.ve = 1;
 if (!ed->vcpu_info) { printf("Stopping in init_all_rr\n"); dummy(); }
@@ -375,9 +377,7 @@
        if (ed->vcpu_info->arch.metaphysical_mode) {
                ia64_rr rrv;
 
-               rrv.rrval = 0;
-               rrv.rid = ed->domain->metaphysical_rid;
-               rrv.ps = PAGE_SHIFT;
+               rrv.rrval = ed->domain->arch.metaphysical_rr0;
                rrv.ve = 1;
                rr0 = rrv.rrval;
                set_rr_no_srlz(0x0000000000000000L, rr0);
diff -Nru a/xen/arch/ia64/vcpu.c b/xen/arch/ia64/vcpu.c
--- a/xen/arch/ia64/vcpu.c      2005-06-10 14:02:36 -04:00
+++ b/xen/arch/ia64/vcpu.c      2005-06-10 14:02:36 -04:00
@@ -117,7 +117,7 @@
 {
        /* only do something if mode changes */
        if (!!newmode ^ !!PSCB(vcpu,metaphysical_mode)) {
-               if (newmode) 
set_metaphysical_rr(0,vcpu->domain->metaphysical_rid);
+               if (newmode) set_metaphysical_rr0();
                else if (PSCB(vcpu,rrs[0]) != -1)
                        set_one_rr(0, PSCB(vcpu,rrs[0]));
                PSCB(vcpu,metaphysical_mode) = newmode;
@@ -167,6 +167,12 @@
 IA64FAULT vcpu_set_psr_dt(VCPU *vcpu)
 {
        vcpu_set_metaphysical_mode(vcpu,FALSE);
+       return IA64_NO_FAULT;
+}
+
+IA64FAULT vcpu_set_psr_i(VCPU *vcpu)
+{
+       PSCB(vcpu,interrupt_delivery_enabled) = 1;
        return IA64_NO_FAULT;
 }
 
diff -Nru a/xen/include/asm-ia64/domain.h b/xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     2005-06-10 14:02:35 -04:00
+++ b/xen/include/asm-ia64/domain.h     2005-06-10 14:02:35 -04:00
@@ -26,7 +26,7 @@
 struct arch_domain {
     struct mm_struct *active_mm;
     struct mm_struct *mm;
-    int metaphysical_rid;
+    int metaphysical_rr0;
     int starting_rid;          /* first RID assigned to domain */
     int ending_rid;            /* one beyond highest RID assigned to domain */
     int rid_bits;              /* number of virtual rid bits (default: 18) */
@@ -46,7 +46,6 @@
     u64 entry;
 #endif
 };
-#define metaphysical_rid arch.metaphysical_rid
 #define starting_rid arch.starting_rid
 #define ending_rid arch.ending_rid
 #define rid_bits arch.rid_bits
@@ -74,6 +73,8 @@
        unsigned long xen_timer_interval;
 #endif
     void *regs;        /* temporary until find a better way to do privops */
+    int metaphysical_rr0;              // from arch_domain (so is pinned)
+    int metaphysical_saved_rr0;                // from arch_domain (so is 
pinned)
     struct mm_struct *active_mm;
     struct thread_struct _thread;      // this must be last
 #ifdef CONFIG_VTI

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Restructure metaphysical mode rid management to ensure easy, BitKeeper Bot <=