Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/sparc64 - add a PDB_CTX_FLUSHALL debug type to pmap...



details:   https://anonhg.NetBSD.org/src/rev/c2e6af400832
branches:  trunk
changeset: 751334:c2e6af400832
user:      mrg <mrg%NetBSD.org@localhost>
date:      Mon Feb 01 02:42:33 2010 +0000

description:
- add a PDB_CTX_FLUSHALL debug type to pmap.c, and also log the cpu_number()
  in a bunch more cases

- make sparc64_ipi_halt_thiscpu() and sparc64_ipi_pause_thiscpu() return void,
  their callers never checked anyway.

- remove prototypes for sparc64_ipi_flush_ctx() and sparc64_ipi_flush_all(),
  there are no such functions

diffstat:

 sys/arch/sparc64/include/intr.h     |   6 +-
 sys/arch/sparc64/sparc64/ipifuncs.c |  24 +++++++++------
 sys/arch/sparc64/sparc64/pmap.c     |  57 +++++++++++++++++++-----------------
 3 files changed, 47 insertions(+), 40 deletions(-)

diffs (194 lines):

diff -r 55c98cac19e9 -r c2e6af400832 sys/arch/sparc64/include/intr.h
--- a/sys/arch/sparc64/include/intr.h   Mon Feb 01 00:39:03 2010 +0000
+++ b/sys/arch/sparc64/include/intr.h   Mon Feb 01 02:42:33 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: intr.h,v 1.26 2009/11/30 09:34:39 nakayama Exp $ */
+/*     $NetBSD: intr.h,v 1.27 2010/02/01 02:42:33 mrg Exp $ */
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -61,8 +61,8 @@
 #if defined(MULTIPROCESSOR)
 #ifndef _LOCORE
 void   sparc64_ipi_init (void);
-int    sparc64_ipi_halt_thiscpu (void *);
-int    sparc64_ipi_pause_thiscpu (void *);
+void   sparc64_ipi_halt_thiscpu (void *);
+void   sparc64_ipi_pause_thiscpu (void *);
 void   sparc64_do_pause(void);
 void   sparc64_ipi_drop_fpstate (void *);
 void   sparc64_ipi_save_fpstate (void *);
diff -r 55c98cac19e9 -r c2e6af400832 sys/arch/sparc64/sparc64/ipifuncs.c
--- a/sys/arch/sparc64/sparc64/ipifuncs.c       Mon Feb 01 00:39:03 2010 +0000
+++ b/sys/arch/sparc64/sparc64/ipifuncs.c       Mon Feb 01 02:42:33 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ipifuncs.c,v 1.26 2010/01/15 23:57:07 nakayama Exp $ */
+/*     $NetBSD: ipifuncs.c,v 1.27 2010/02/01 02:42:33 mrg Exp $ */
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.26 2010/01/15 23:57:07 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.27 2010/02/01 02:42:33 mrg Exp $");
 
 #include "opt_ddb.h"
 
@@ -67,21 +67,26 @@
 void   sparc64_ipi_halt(void *);
 void   sparc64_ipi_pause(void *);
 void   sparc64_ipi_flush_pte(void *);
-void   sparc64_ipi_flush_ctx(void *);
-void   sparc64_ipi_flush_all(void *);
 
 /*
  * Process cpu stop-self event.
  */
-int
+void
 sparc64_ipi_halt_thiscpu(void *arg)
 {
+       extern void prom_printf(const char *fmt, ...);
 
        printf("cpu%d: shutting down\n", cpu_number());
        CPUSET_ADD(cpus_halted, cpu_number());
-       prom_stopself();
-
-       return(1);
+       if (((getver() & VER_IMPL) >> VER_IMPL_SHIFT) >= IMPL_CHEETAH) {
+               /*
+                * prom_selfstop() doesn't seem to work on newer machines.
+                */
+               spl0();
+               while (1)
+                       /* nothing */;
+       } else
+               prom_stopself();
 }
 
 void
@@ -111,7 +116,7 @@
 /*
  * Pause cpu.  This is called from locore.s after setting up a trapframe.
  */
-int
+void
 sparc64_ipi_pause_thiscpu(void *arg)
 {
        int s;
@@ -134,7 +139,6 @@
 #endif
 
        intr_restore(s);
-       return (1);
 }
 
 /*
diff -r 55c98cac19e9 -r c2e6af400832 sys/arch/sparc64/sparc64/pmap.c
--- a/sys/arch/sparc64/sparc64/pmap.c   Mon Feb 01 00:39:03 2010 +0000
+++ b/sys/arch/sparc64/sparc64/pmap.c   Mon Feb 01 02:42:33 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.c,v 1.246 2010/01/10 15:07:53 skrll Exp $ */
+/*     $NetBSD: pmap.c,v 1.247 2010/02/01 02:42:33 mrg Exp $   */
 /*
  *
  * Copyright (C) 1996-1999 Eduardo Horvath.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.246 2010/01/10 15:07:53 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.247 2010/02/01 02:42:33 mrg Exp $");
 
 #undef NO_VCACHE /* Don't forget the locked TLB in dostart */
 #define        HWREF
@@ -311,27 +311,27 @@
 #define        ENTER_STAT(x)   enter_stats.x ++
 #define        REMOVE_STAT(x)  remove_stats.x ++
 
-#define        PDB_CREATE      0x0001
-#define        PDB_DESTROY     0x0002
-#define        PDB_REMOVE      0x0004
-#define        PDB_CHANGEPROT  0x0008
-#define        PDB_ENTER       0x0010
-#define PDB_DEMAP      0x0020
-#define        PDB_REF         0x0040
-#define PDB_COPY       0x0080
-
-#define        PDB_MMU_ALLOC   0x0100
-#define        PDB_MMU_STEAL   0x0200
-#define        PDB_CTX_ALLOC   0x0400
-#define        PDB_CTX_STEAL   0x0800
-#define        PDB_MMUREG_ALLOC        0x1000
-#define        PDB_MMUREG_STEAL        0x2000
-#define        PDB_CACHESTUFF  0x4000
-#define        PDB_ALIAS       0x8000
-#define PDB_EXTRACT    0x10000
-#define        PDB_BOOT        0x20000
-#define        PDB_BOOT1       0x40000
-#define        PDB_GROW        0x80000
+#define        PDB_CREATE              0x000001
+#define        PDB_DESTROY             0x000002
+#define        PDB_REMOVE              0x000004
+#define        PDB_CHANGEPROT          0x000008
+#define        PDB_ENTER               0x000010
+#define PDB_DEMAP              0x000020
+#define        PDB_REF                 0x000040
+#define PDB_COPY               0x000080
+#define        PDB_MMU_ALLOC           0x000100
+#define        PDB_MMU_STEAL           0x000200
+#define        PDB_CTX_ALLOC           0x000400
+#define        PDB_CTX_STEAL           0x000800
+#define        PDB_MMUREG_ALLOC        0x001000
+#define        PDB_MMUREG_STEAL        0x002000
+#define        PDB_CACHESTUFF          0x004000
+#define        PDB_ALIAS               0x008000
+#define PDB_EXTRACT            0x010000
+#define        PDB_BOOT                0x020000
+#define        PDB_BOOT1               0x040000
+#define        PDB_GROW                0x080000
+#define        PDB_CTX_FLUSHALL        0x100000
 int    pmapdebug = 0;
 /* Number of H/W pages stolen for page tables */
 int    pmap_pages_stolen = 0;
@@ -3045,7 +3045,7 @@
         */
 
        if (ctx == curcpu()->ci_numctx) {
-               DPRINTF(PDB_CTX_ALLOC,
+               DPRINTF(PDB_CTX_ALLOC|PDB_CTX_FLUSHALL,
                        ("ctx_alloc: cpu%d run out of contexts %d\n",
                         cpu_number(), curcpu()->ci_numctx));
                write_user_windows();
@@ -3080,7 +3080,8 @@
        );
        pmap_ctx(pm) = ctx;
        mutex_exit(&pmap_lock);
-       DPRINTF(PDB_CTX_ALLOC, ("ctx_alloc: allocated ctx %d\n", ctx));
+       DPRINTF(PDB_CTX_ALLOC, ("ctx_alloc: cpu%d allocated ctx %d\n",
+               cpu_number(), ctx));
        return ctx;
 }
 
@@ -3112,7 +3113,8 @@
        }
 #endif
        /* We should verify it has not been stolen and reallocated... */
-       DPRINTF(PDB_CTX_ALLOC, ("ctx_free: freeing ctx %d\n", oldctx));
+       DPRINTF(PDB_CTX_ALLOC, ("ctx_free: cpu%d freeing ctx %d\n",
+               cpu_number(), oldctx));
        ci->ci_ctxbusy[oldctx] = 0UL;
        pm->pm_ctx[ci->ci_index] = 0;
        LIST_REMOVE(pm, pm_list[ci->ci_index]);
@@ -3141,7 +3143,8 @@
        }
 #endif
        /* We should verify it has not been stolen and reallocated... */
-       DPRINTF(PDB_CTX_ALLOC, ("ctx_free: freeing ctx %d\n", oldctx));
+       DPRINTF(PDB_CTX_ALLOC, ("ctx_free: cpu%d freeing ctx %d\n",
+               cpu_number(), oldctx));
        curcpu()->ci_ctxbusy[oldctx] = 0UL;
        pmap_ctx(pm) = 0;
        LIST_REMOVE(pm, pm_list);



Home | Main Index | Thread Index | Old Index