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] Lazy pagetable and LDT switching was unsafe -- do them s

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Lazy pagetable and LDT switching was unsafe -- do them synchronously
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Tue, 29 Mar 2005 14:52:44 +0000
Delivery-date: Tue, 29 Mar 2005 15:02: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@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1389, 2005/03/29 15:52:44+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Lazy pagetable and LDT switching was unsafe -- do them synchronously
        for now, and maybe think about batching across switch_mm and switch_to
        in the future (particularly for 2.6, which we care about more than 2.4).
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/xen/kernel/ldt.c         |    2 --
 arch/xen/kernel/process.c     |   29 -----------------------------
 arch/xen/mm/fault.c           |    1 -
 include/asm-xen/mmu_context.h |   18 ++++--------------
 4 files changed, 4 insertions(+), 46 deletions(-)


diff -Nru a/linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c 
b/linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c
--- a/linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c     2005-03-29 10:02:38 
-05:00
+++ b/linux-2.4.29-xen-sparse/arch/xen/kernel/ldt.c     2005-03-29 10:02:38 
-05:00
@@ -117,8 +117,6 @@
 void destroy_context(struct mm_struct *mm)
 {
        if (mm->context.size) {
-               if (mm_state_sync & STATE_SYNC_LDT)
-                       clear_LDT();
                make_pages_writable(
                        mm->context.ldt, 
                        (mm->context.size*LDT_ENTRY_SIZE)/PAGE_SIZE);
diff -Nru a/linux-2.4.29-xen-sparse/arch/xen/kernel/process.c 
b/linux-2.4.29-xen-sparse/arch/xen/kernel/process.c
--- a/linux-2.4.29-xen-sparse/arch/xen/kernel/process.c 2005-03-29 10:02:38 
-05:00
+++ b/linux-2.4.29-xen-sparse/arch/xen/kernel/process.c 2005-03-29 10:02:38 
-05:00
@@ -305,35 +305,6 @@
     struct thread_struct *next = &next_p->thread;
     physdev_op_t op;
     multicall_entry_t _mcl[8], *mcl = _mcl;
-    mmu_update_t _mmu[2], *mmu = _mmu;
-
-    if ( mm_state_sync & STATE_SYNC_PT )
-    {
-        mmu->ptr = virt_to_machine(cur_pgd) | MMU_EXTENDED_COMMAND;
-        mmu->val = MMUEXT_NEW_BASEPTR;
-        mmu++;
-    }
-
-    if ( mm_state_sync & STATE_SYNC_LDT )
-    {
-        __asm__ __volatile__ ( 
-            "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : : "eax" );
-        mmu->ptr = (unsigned long)next_p->mm->context.ldt |
-            MMU_EXTENDED_COMMAND;
-        mmu->val = (next_p->mm->context.size << MMUEXT_CMD_SHIFT) |
-            MMUEXT_SET_LDT;
-        mmu++;
-    }
-
-    if ( mm_state_sync != 0 )
-    {
-        mcl->op      = __HYPERVISOR_mmu_update;
-        mcl->args[0] = (unsigned long)_mmu;
-        mcl->args[1] = mmu - _mmu;
-        mcl->args[2] = 0;
-        mcl++;
-        mm_state_sync = 0;
-    }
 
     /*
      * This is basically 'unlazy_fpu', except that we queue a multicall to 
diff -Nru a/linux-2.4.29-xen-sparse/arch/xen/mm/fault.c 
b/linux-2.4.29-xen-sparse/arch/xen/mm/fault.c
--- a/linux-2.4.29-xen-sparse/arch/xen/mm/fault.c       2005-03-29 10:02:38 
-05:00
+++ b/linux-2.4.29-xen-sparse/arch/xen/mm/fault.c       2005-03-29 10:02:38 
-05:00
@@ -28,7 +28,6 @@
 extern void die(const char *,struct pt_regs *,long);
 
 pgd_t *cur_pgd;
-int mm_state_sync;
 
 extern spinlock_t timerlist_lock;
 
diff -Nru a/linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h 
b/linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h
--- a/linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h     2005-03-29 
10:02:38 -05:00
+++ b/linux-2.4.29-xen-sparse/include/asm-xen/mmu_context.h     2005-03-29 
10:02:38 -05:00
@@ -28,9 +28,6 @@
 #endif
 
 extern pgd_t *cur_pgd;
-extern int mm_state_sync;
-#define STATE_SYNC_PT  1
-#define STATE_SYNC_LDT 2
 
 static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, 
struct task_struct *tsk, unsigned cpu)
 {
@@ -39,23 +36,16 @@
                clear_bit(cpu, &prev->cpu_vm_mask);
                /* Re-load page tables */
                cur_pgd = next->pgd;
-               mm_state_sync |= STATE_SYNC_PT;
+               xen_pt_switch(__pa(cur_pgd));
                /* load_LDT, if either the previous or next thread
                 * has a non-default LDT.
                 */
                if (next->context.size+prev->context.size)
-                       mm_state_sync |= STATE_SYNC_LDT;
+                       load_LDT(&next->context);
        }
 }
 
-#define activate_mm(prev, next)                                 \
-do {                                                            \
-       switch_mm((prev),(next),NULL,smp_processor_id());       \
-       if (mm_state_sync & STATE_SYNC_PT)                      \
-               xen_pt_switch(__pa(cur_pgd));                   \
-       if (mm_state_sync & STATE_SYNC_LDT)                     \
-               load_LDT(&(next)->context);                     \
-       mm_state_sync = 0;                                      \
-} while ( 0 )
+#define activate_mm(prev, next)        \
+       switch_mm((prev),(next),NULL,smp_processor_id())
 
 #endif

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Lazy pagetable and LDT switching was unsafe -- do them synchronously, BitKeeper Bot <=