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] No direct entry to __enter_scheduler allowed. Must alway

To: xen-changelog@xxxxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] No direct entry to __enter_scheduler allowed. Must always pass through
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Fri, 25 Mar 2005 13:46:20 +0000
Delivery-date: Fri, 25 Mar 2005 14:04:51 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-archive: <http://sourceforge.net/mailarchive/forum.php?forum=xen-changelog>
List-help: <mailto:xen-changelog-request@lists.sourceforge.net?subject=help>
List-id: <xen-changelog.lists.sourceforge.net>
List-post: <mailto:xen-changelog@lists.sourceforge.net>
List-subscribe: <https://lists.sourceforge.net/lists/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.sourceforge.net?subject=subscribe>
List-unsubscribe: <https://lists.sourceforge.net/lists/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.sourceforge.net?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-admin@xxxxxxxxxxxxxxxxxxxxx
ChangeSet 1.1367.1.1, 2005/03/25 13:46:20+00:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        No direct entry to __enter_scheduler allowed. Must always pass through
        softirq handler. Also domain_crash() now returns and defers
        descehduling from local CPU: old behaviour is still provided by
        domain_crash_synchronous().
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/ia64/domain.c         |    5 +-
 arch/x86/domain.c          |    3 +
 arch/x86/mm.c              |   48 ++++------------------------
 arch/x86/shadow.c          |   16 +++++----
 arch/x86/traps.c           |   29 +----------------
 arch/x86/vmx.c             |   19 +++++------
 arch/x86/vmx_intercept.c   |    2 -
 arch/x86/vmx_io.c          |    6 +--
 arch/x86/vmx_platform.c    |   14 ++++----
 arch/x86/x86_32/entry.S    |   24 ++++++++------
 arch/x86/x86_64/entry.S    |   14 ++++----
 common/domain.c            |   28 ++++++++--------
 common/schedule.c          |    9 +----
 drivers/char/console.c     |    2 -
 include/asm-x86/debugger.h |   76 +++++++++++----------------------------------
 include/asm-x86/vmx_vmcs.h |    2 -
 include/xen/sched.h        |   15 +++++++-
 17 files changed, 119 insertions(+), 193 deletions(-)


diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c    2005-03-25 09:03:41 -05:00
+++ b/xen/arch/ia64/domain.c    2005-03-25 09:03:41 -05:00
@@ -102,8 +102,9 @@
 {
     /* Just some sanity to ensure that the scheduler is set up okay. */
     ASSERT(current->domain == IDLE_DOMAIN_ID);
-    domain_unpause_by_systemcontroller(current);
-    __enter_scheduler();
+    domain_unpause_by_systemcontroller(current); 
+    raise_softirq(SCHEDULE_SOFTIRQ);
+    do_softirq();
 
     /*
      * Declares CPU setup done to the boot processor.
diff -Nru a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     2005-03-25 09:03:41 -05:00
+++ b/xen/arch/x86/domain.c     2005-03-25 09:03:41 -05:00
@@ -74,7 +74,8 @@
     /* Just some sanity to ensure that the scheduler is set up okay. */
     ASSERT(current->domain->id == IDLE_DOMAIN_ID);
     domain_unpause_by_systemcontroller(current->domain);
-    __enter_scheduler();
+    raise_softirq(SCHEDULE_SOFTIRQ);
+    do_softirq();
 
     /*
      * Declares CPU setup done to the boot processor.
diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c 2005-03-25 09:03:41 -05:00
+++ b/xen/arch/x86/mm.c 2005-03-25 09:03:41 -05:00
@@ -1669,8 +1669,8 @@
     if ( unlikely(shadow_mode_enabled(d)) )
         check_pagetable(d, ed->arch.guest_table, "pre-mmu"); /* debug */
 
-    if ( unlikely(shadow_mode_translate(d) ) )
-        domain_crash();
+    if ( unlikely(shadow_mode_translate(d)) )
+        domain_crash_synchronous();
 
     /*
      * If we are resuming after preemption, read how much work we have already
@@ -2033,8 +2033,8 @@
     if ( unlikely(!__addr_ok(va)) )
         return -EINVAL;
 
-    if ( unlikely(shadow_mode_translate(d) ) )
-        domain_crash();
+    if ( unlikely(shadow_mode_translate(d)) )
+        domain_crash_synchronous();
 
     LOCK_BIGLOCK(d);
 
@@ -2312,7 +2312,7 @@
         MEM_LOG("ptwr: Could not read pte at %p\n", ptep);
         /*
          * Really a bug. We could read this PTE during the initial fault,
-         * and pagetables can't have changed meantime. XXX Multi-CPU guests?
+         * and pagetables can't have changed meantime.
          */
         BUG();
     }
@@ -2339,7 +2339,7 @@
         MEM_LOG("ptwr: Could not update pte at %p\n", ptep);
         /*
          * Really a bug. We could write this PTE during the initial fault,
-         * and pagetables can't have changed meantime. XXX Multi-CPU guests?
+         * and pagetables can't have changed meantime.
          */
         BUG();
     }
@@ -2395,6 +2395,7 @@
             unmap_domain_mem(pl1e);
             ptwr_info[cpu].ptinfo[which].l1va = 0;
             domain_crash();
+            return;
         }
         
         if ( unlikely(sl1e != NULL) )
@@ -2688,6 +2689,7 @@
         unmap_domain_mem(ptwr_info[cpu].ptinfo[which].pl1e);
         ptwr_info[cpu].ptinfo[which].l1va = 0;
         domain_crash();
+        return 0;
     }
     
     return EXCRET_fault_fixed;
@@ -2724,40 +2726,6 @@
 /************************************************************************/
 
 #ifndef NDEBUG
-
-void ptwr_status(void)
-{
-    unsigned long pte, *ptep, pfn;
-    struct pfn_info *page;
-    int cpu = smp_processor_id();
-
-    ptep = (unsigned long *)&linear_pg_table
-        [ptwr_info[cpu].ptinfo[PTWR_PT_INACTIVE].l1va>>PAGE_SHIFT];
-
-    if ( __get_user(pte, ptep) ) {
-        MEM_LOG("ptwr: Could not read pte at %p\n", ptep);
-        domain_crash();
-    }
-
-    pfn = pte >> PAGE_SHIFT;
-    page = &frame_table[pfn];
-    printk("need to alloc l1 page %p\n", page);
-    /* make pt page writable */
-    printk("need to make read-only l1-page at %p is %p\n",
-           ptep, pte);
-
-    if ( ptwr_info[cpu].ptinfo[PTWR_PT_ACTIVE].l1va == 0 )
-        return;
-
-    if ( __get_user(pte, (unsigned long *)
-                    ptwr_info[cpu].ptinfo[PTWR_PT_ACTIVE].l1va) ) {
-        MEM_LOG("ptwr: Could not read pte at %p\n", (unsigned long *)
-                ptwr_info[cpu].ptinfo[PTWR_PT_ACTIVE].l1va);
-        domain_crash();
-    }
-    pfn = pte >> PAGE_SHIFT;
-    page = &frame_table[pfn];
-}
 
 void audit_pagelist(struct domain *d)
 {
diff -Nru a/xen/arch/x86/shadow.c b/xen/arch/x86/shadow.c
--- a/xen/arch/x86/shadow.c     2005-03-25 09:03:41 -05:00
+++ b/xen/arch/x86/shadow.c     2005-03-25 09:03:41 -05:00
@@ -655,15 +655,13 @@
                              &linear_pg_table[va >> PAGE_SHIFT])) )
     {
         SH_VVLOG("shadow_fault - EXIT: read gpte faulted2" );
-        shadow_unlock(d);
-        return 0;
+        goto fail;
     }
 
     if ( unlikely(!(gpte & _PAGE_PRESENT)) )
     {
         SH_VVLOG("shadow_fault - EXIT: gpte not present2 (%lx)",gpte );
-        shadow_unlock(d);
-        return 0;
+        goto fail;
     }
 
     /* Write fault? */
@@ -673,8 +671,7 @@
         {
             /* Write fault on a read-only mapping. */
             SH_VVLOG("shadow_fault - EXIT: wr fault on RO page (%lx)", gpte);
-            shadow_unlock(d);
-            return 0;
+            goto fail;
         }
 
         l1pte_write_fault(d, &gpte, &spte);
@@ -691,7 +688,10 @@
     /* XXX Watch out for read-only L2 entries! (not used in Linux). */
     if ( unlikely(__put_user(gpte, (unsigned long *)
                              &linear_pg_table[va >> PAGE_SHIFT])) )
+    {
         domain_crash();
+        goto fail;
+    }
 
     /*
      * Update of shadow PTE can fail because the L1 p.t. is not shadowed,
@@ -712,6 +712,10 @@
 
     check_pagetable(d, ed->arch.guest_table, "post-sf");
     return EXCRET_fault_fixed;
+
+ fail:
+    shadow_unlock(d);
+    return 0;
 }
 
 
diff -Nru a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c      2005-03-25 09:03:42 -05:00
+++ b/xen/arch/x86/traps.c      2005-03-25 09:03:42 -05:00
@@ -223,18 +223,7 @@
         show_registers(regs);
         panic("CPU%d FATAL TRAP: vector = 3 (Int3)\n", smp_processor_id());
     } 
-#ifdef DOMU_DEBUG
-    else if ( KERNEL_MODE(ed, regs) && ed->domain->id != 0 ) 
-    {
-        if ( !test_and_set_bit(EDF_CTRLPAUSE, &ed->ed_flags) ) {
-            while (ed == current)
-                __enter_scheduler();
-            domain_pause_by_systemcontroller(ed->domain);
-        }
-        
-        return 0;
-    }
-#endif /* DOMU_DEBUG */
+
     ti = current->arch.traps + 3;
     tb->flags = TBF_EXCEPTION;
     tb->cs    = ti->cs;
@@ -950,8 +939,6 @@
     struct exec_domain *ed = current;
     struct trap_bounce *tb = &ed->arch.trap_bounce;
 
-    DEBUGGER_trap_entry(TRAP_debug, regs);
-
     __asm__ __volatile__("mov %%db6,%0" : "=r" (condition));
 
     /* Mask out spurious debug traps due to lazy DR7 setting */
@@ -962,6 +949,8 @@
         goto out;
     }
 
+    DEBUGGER_trap_entry(TRAP_debug, regs);
+
     if ( !GUEST_MODE(regs) )
     {
         /* Clear TF just for absolute sanity. */
@@ -974,19 +963,7 @@
          */
         goto out;
     } 
-#ifdef DOMU_DEBUG
-    else if ( KERNEL_MODE(ed, regs) && ed->domain->id != 0 ) 
-    {
-        regs->eflags &= ~EF_TF;
-        if ( !test_and_set_bit(EDF_CTRLPAUSE, &ed->ed_flags) ) {
-            while (ed == current)
-                __enter_scheduler();
-            domain_pause_by_systemcontroller(ed->domain);
-        }
 
-        goto out;
-    }    
-#endif /* DOMU_DEBUG */
     /* Save debug status register where guest OS can peek at it */
     ed->arch.debugreg[6] = condition;
 
diff -Nru a/xen/arch/x86/vmx.c b/xen/arch/x86/vmx.c
--- a/xen/arch/x86/vmx.c        2005-03-25 09:03:41 -05:00
+++ b/xen/arch/x86/vmx.c        2005-03-25 09:03:41 -05:00
@@ -22,6 +22,7 @@
 #include <xen/lib.h>
 #include <xen/trace.h>
 #include <xen/sched.h>
+#include <xen/softirq.h>


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>