Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/cherry-xenmp]: src/sys/arch Remove the "xpq lock", since we have per-cpu...



details:   https://anonhg.NetBSD.org/src/rev/9a8c5ccfb0dd
branches:  cherry-xenmp
changeset: 765644:9a8c5ccfb0dd
user:      cherry <cherry%NetBSD.org@localhost>
date:      Tue Sep 20 18:57:50 2011 +0000

description:
Remove the "xpq lock", since we have per-cpu mmu queues now. This may need further testing. Also add some preliminary locking around queue-ops in the network backend driver

diffstat:

 sys/arch/amd64/include/pmap.h        |  14 +------
 sys/arch/i386/i386/gdt.c             |   6 +-
 sys/arch/i386/i386/machdep.c         |   6 +-
 sys/arch/i386/include/pmap.h         |  14 +------
 sys/arch/x86/include/pmap.h          |   5 +-
 sys/arch/x86/x86/pmap.c              |  21 +---------
 sys/arch/x86/x86/pmap_tlb.c          |   6 +-
 sys/arch/xen/include/xenpmap.h       |  12 +-----
 sys/arch/xen/x86/cpu.c               |  13 +-----
 sys/arch/xen/x86/x86_xpmap.c         |  76 +++++++----------------------------
 sys/arch/xen/x86/xen_bus_dma.c       |   6 +-
 sys/arch/xen/x86/xen_pmap.c          |   6 +-
 sys/arch/xen/x86/xenfunc.c           |  10 +---
 sys/arch/xen/xen/if_xennet_xenbus.c  |  49 +++++++++++++---------
 sys/arch/xen/xen/xennetback_xenbus.c |   6 +-
 15 files changed, 65 insertions(+), 185 deletions(-)

diffs (truncated from 1114 to 300 lines):

diff -r a9aafb2aff50 -r 9a8c5ccfb0dd sys/arch/amd64/include/pmap.h
--- a/sys/arch/amd64/include/pmap.h     Sun Sep 18 18:54:32 2011 +0000
+++ b/sys/arch/amd64/include/pmap.h     Tue Sep 20 18:57:50 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.h,v 1.24.2.2 2011/08/20 19:22:46 cherry Exp $     */
+/*     $NetBSD: pmap.h,v 1.24.2.3 2011/09/20 18:57:50 cherry Exp $     */
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -277,9 +277,7 @@
 pmap_pte_set(pt_entry_t *pte, pt_entry_t npte)
 {
        int s = splvm();
-       xpq_queue_lock();
        xpq_queue_pte_update(xpmap_ptetomach(pte), npte);
-       xpq_queue_unlock();
        splx(s);
 }
 
@@ -288,14 +286,12 @@
 {
        int s = splvm();
 
-       xpq_queue_lock();
        pt_entry_t opte = *ptep;
 
        if (opte == o) {
                xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(ptep)), n);
                xpq_flush_queue();
        }
-       xpq_queue_unlock();
        splx(s);
        return opte;
 }
@@ -304,11 +300,9 @@
 pmap_pte_testset(volatile pt_entry_t *pte, pt_entry_t npte)
 {
        int s = splvm();
-       xpq_queue_lock();
        pt_entry_t opte = *pte;
        xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(pte)), npte);
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
        return opte;
 }
@@ -317,10 +311,8 @@
 pmap_pte_setbits(volatile pt_entry_t *pte, pt_entry_t bits)
 {
        int s = splvm();
-       xpq_queue_lock();
        xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(pte)), (*pte) | bits);
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
 }
 
@@ -328,11 +320,9 @@
 pmap_pte_clearbits(volatile pt_entry_t *pte, pt_entry_t bits)
 {      
        int s = splvm();
-       xpq_queue_lock();
        xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(pte)),
            (*pte) & ~bits);
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
 }
 
@@ -340,9 +330,7 @@
 pmap_pte_flush(void)
 {
        int s = splvm();
-       xpq_queue_lock();
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
 }
 #endif
diff -r a9aafb2aff50 -r 9a8c5ccfb0dd sys/arch/i386/i386/gdt.c
--- a/sys/arch/i386/i386/gdt.c  Sun Sep 18 18:54:32 2011 +0000
+++ b/sys/arch/i386/i386/gdt.c  Tue Sep 20 18:57:50 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: gdt.c,v 1.50.10.2 2011/08/06 14:05:35 cherry Exp $     */
+/*     $NetBSD: gdt.c,v 1.50.10.3 2011/09/20 18:57:51 cherry Exp $     */
 
 /*-
  * Copyright (c) 1996, 1997, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gdt.c,v 1.50.10.2 2011/08/06 14:05:35 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gdt.c,v 1.50.10.3 2011/09/20 18:57:51 cherry Exp $");
 
 #include "opt_multiprocessor.h"
 #include "opt_xen.h"
@@ -214,11 +214,9 @@
                    * properly yet, ie; curcpu() won't work at this
                    * point and spl() will break.
                    */
-                  xpq_queue_lock();
                   xpq_queue_pte_update(xpmap_ptetomach(ptp),
                                        *ptp & ~PG_RW);
                   xpq_flush_queue();
-                  xpq_queue_unlock();
                }
        }
 
diff -r a9aafb2aff50 -r 9a8c5ccfb0dd sys/arch/i386/i386/machdep.c
--- a/sys/arch/i386/i386/machdep.c      Sun Sep 18 18:54:32 2011 +0000
+++ b/sys/arch/i386/i386/machdep.c      Tue Sep 20 18:57:50 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.702.2.6 2011/08/30 12:53:45 cherry Exp $ */
+/*     $NetBSD: machdep.c,v 1.702.2.7 2011/09/20 18:57:51 cherry Exp $ */
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.702.2.6 2011/08/30 12:53:45 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.702.2.7 2011/09/20 18:57:51 cherry Exp $");
 
 #include "opt_beep.h"
 #include "opt_compat_ibcs2.h"
@@ -1207,10 +1207,8 @@
                npte = pmap_pa2pte((vaddr_t)gdt - KERNBASE);
                npte |= PG_RO | pg_nx | PG_V;
 
-               xpq_queue_lock();
                xpq_queue_pte_update(xpmap_ptetomach(pte), npte);
                xpq_flush_queue();
-               xpq_queue_unlock();
        }
 
        XENPRINTK(("loading gdt %lx, %d entries\n", frames[0] << PAGE_SHIFT,
diff -r a9aafb2aff50 -r 9a8c5ccfb0dd sys/arch/i386/include/pmap.h
--- a/sys/arch/i386/include/pmap.h      Sun Sep 18 18:54:32 2011 +0000
+++ b/sys/arch/i386/include/pmap.h      Tue Sep 20 18:57:50 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.h,v 1.109.2.2 2011/08/20 19:22:46 cherry Exp $    */
+/*     $NetBSD: pmap.h,v 1.109.2.3 2011/09/20 18:57:51 cherry Exp $    */
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -369,9 +369,7 @@
 pmap_pte_set(pt_entry_t *pte, pt_entry_t npte)
 {
        int s = splvm();
-       xpq_queue_lock();
        xpq_queue_pte_update(xpmap_ptetomach(pte), npte);
-       xpq_queue_unlock();
        splx(s);
 }
 
@@ -379,14 +377,12 @@
 pmap_pte_cas(volatile pt_entry_t *ptep, pt_entry_t o, pt_entry_t n)
 {
        int s = splvm();
-       xpq_queue_lock();
        pt_entry_t opte = *ptep;
 
        if (opte == o) {
                xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(ptep)), n);
                xpq_flush_queue();
        }
-       xpq_queue_unlock();
        splx(s);
        return opte;
 }
@@ -395,12 +391,10 @@
 pmap_pte_testset(volatile pt_entry_t *pte, pt_entry_t npte)
 {
        int s = splvm();
-       xpq_queue_lock();
        pt_entry_t opte = *pte;
        xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(pte)),
            npte);
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
        return opte;
 }
@@ -409,10 +403,8 @@
 pmap_pte_setbits(volatile pt_entry_t *pte, pt_entry_t bits)
 {
        int s = splvm();
-       xpq_queue_lock();
        xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(pte)), (*pte) | bits);
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
 }
 
@@ -420,11 +412,9 @@
 pmap_pte_clearbits(volatile pt_entry_t *pte, pt_entry_t bits)
 {      
        int s = splvm();
-       xpq_queue_lock();
        xpq_queue_pte_update(xpmap_ptetomach(__UNVOLATILE(pte)),
            (*pte) & ~bits);
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
 }
 
@@ -432,9 +422,7 @@
 pmap_pte_flush(void)
 {
        int s = splvm();
-       xpq_queue_lock();
        xpq_flush_queue();
-       xpq_queue_unlock();
        splx(s);
 }
 
diff -r a9aafb2aff50 -r 9a8c5ccfb0dd sys/arch/x86/include/pmap.h
--- a/sys/arch/x86/include/pmap.h       Sun Sep 18 18:54:32 2011 +0000
+++ b/sys/arch/x86/include/pmap.h       Tue Sep 20 18:57:50 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.h,v 1.38.2.2 2011/06/23 14:19:48 cherry Exp $     */
+/*     $NetBSD: pmap.h,v 1.38.2.3 2011/09/20 18:57:52 cherry Exp $     */
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -431,11 +431,8 @@
 xpmap_update (pt_entry_t *pte, pt_entry_t npte)
 {
         int s = splvm();
-
-       xpq_queue_lock();
         xpq_queue_pte_update(xpmap_ptetomach(pte), npte);
         xpq_flush_queue();
-       xpq_queue_unlock();
         splx(s);
 }
 
diff -r a9aafb2aff50 -r 9a8c5ccfb0dd sys/arch/x86/x86/pmap.c
--- a/sys/arch/x86/x86/pmap.c   Sun Sep 18 18:54:32 2011 +0000
+++ b/sys/arch/x86/x86/pmap.c   Tue Sep 20 18:57:50 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.c,v 1.121.2.7 2011/09/09 11:38:20 cherry Exp $    */
+/*     $NetBSD: pmap.c,v 1.121.2.8 2011/09/20 18:57:52 cherry Exp $    */
 
 /*-
  * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
@@ -171,7 +171,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.121.2.7 2011/09/09 11:38:20 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.121.2.8 2011/09/20 18:57:52 cherry Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_lockdebug.h"
@@ -1378,9 +1378,7 @@
        HYPERVISOR_update_va_mapping(xen_dummy_user_pgd + KERNBASE,
            pmap_pa2pte(xen_dummy_user_pgd) | PG_u | PG_V, UVMF_INVLPG);
        /* Pin as L4 */
-       xpq_queue_lock();
        xpq_queue_pin_l4_table(xpmap_ptom_masked(xen_dummy_user_pgd));
-       xpq_queue_unlock();
 #endif /* __x86_64__ */
        idt_vaddr = virtual_avail;                      /* don't need pte */
        idt_paddr = avail_start;                        /* steal a page */
@@ -1495,7 +1493,6 @@
                if (newp < (NKL2_KIMG_ENTRIES * NBPD_L2))
                        HYPERVISOR_update_va_mapping (newp + KERNBASE,
                            xpmap_ptom_masked(newp) | PG_u | PG_V, UVMF_INVLPG);
-               xpq_queue_lock();
                /* Update the pmap_kernel() L4 shadow */
                xpq_queue_pte_update (
                    xpmap_ptom_masked(pdes_pa)
@@ -1508,7 +1505,6 @@
                            pl_i(0, PTP_LEVELS) *
                            sizeof(pd_entry_t)),
                        pmap_kernel()->pm_pdir[pl_i(0, PTP_LEVELS)]);
-               xpq_queue_unlock();
                pmap_pte_flush();
 
                level--;
@@ -2094,21 +2090,16 @@
                        continue;
 #endif
 
-               xpq_queue_lock();
 #ifdef __x86_64__
                xpq_queue_pin_l4_table(xpmap_ptom_masked(pdirpa));
 #else
                xpq_queue_pin_l2_table(xpmap_ptom_masked(pdirpa));
 #endif
-               xpq_queue_unlock();
-
        }
 #ifdef PAE
        object = ((vaddr_t)pdir) + PAGE_SIZE  * l2tol3(PDIR_SLOT_PTE);
        (void)pmap_extract(pmap_kernel(), object, &pdirpa);
-       xpq_queue_lock();



Home | Main Index | Thread Index | Old Index