svn commit: r206123 - in user/jmallett/octeon/sys/mips: include mips

Juli Mallett jmallett at FreeBSD.org
Sat Apr 3 07:27:34 UTC 2010


Author: jmallett
Date: Sat Apr  3 07:27:32 2010
New Revision: 206123
URL: http://svn.freebsd.org/changeset/base/206123

Log:
  o) Add a macro which masks the software-managed bits in the PTE.
  o) Use PDE_OFFSET() in a couple of places that should use it.
  o) Move a reduced-in-features tlb show command to tlb.c.

Modified:
  user/jmallett/octeon/sys/mips/include/pte.h
  user/jmallett/octeon/sys/mips/mips/pmap.c
  user/jmallett/octeon/sys/mips/mips/tlb.c
  user/jmallett/octeon/sys/mips/mips/vm_machdep.c

Modified: user/jmallett/octeon/sys/mips/include/pte.h
==============================================================================
--- user/jmallett/octeon/sys/mips/include/pte.h	Sat Apr  3 07:19:31 2010	(r206122)
+++ user/jmallett/octeon/sys/mips/include/pte.h	Sat Apr  3 07:27:32 2010	(r206123)
@@ -72,6 +72,7 @@ typedef	pt_entry_t *pd_entry_t;
  * other 0 fields.
  */
 #define	TLBLO_SWBITS_SHIFT	(30)
+#define	TLBLO_SWBITS_MASK	(0x3U << TLBLO_SWBITS_SHIFT)
 #define	TLBLO_PFN_SHIFT		(6 + (PAGE_SHIFT - TLBMASK_SHIFT))
 #define	TLBLO_PFN_MASK		(0x03FFFFFC0)
 #define	TLBLO_PA_TO_PFN(pa)	((((pa) >> TLB_PAGE_SHIFT) << TLBLO_PFN_SHIFT) & TLBLO_PFN_MASK)

Modified: user/jmallett/octeon/sys/mips/mips/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/pmap.c	Sat Apr  3 07:19:31 2010	(r206122)
+++ user/jmallett/octeon/sys/mips/mips/pmap.c	Sat Apr  3 07:27:32 2010	(r206123)
@@ -68,7 +68,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_ddb.h"
 #include "opt_msgbuf.h"
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -3406,53 +3405,3 @@ pmap_flush_pvcache(vm_page_t m)
 		}
 	}
 }
-
-#if 0
-#ifdef DDB
-#include <ddb/ddb.h>
-
-DB_SHOW_COMMAND(tlb, ddb_dump_tlb)
-{
-	int cpu, tlbno;
-	struct tlb *tlb;
-
-	if (have_addr)
-		cpu = ((addr >> 4) % 16) * 10 + (addr % 16);
-	else
-		cpu = PCPU_GET(cpuid);
-
-	if (cpu < 0 || cpu >= mp_ncpus) {
-		db_printf("Invalid CPU %d\n", cpu);
-		return;
-	} else
-		db_printf("CPU %d:\n", cpu);
-
-	if (cpu == PCPU_GET(cpuid))
-		pmap_save_tlb();
-
-	for (tlbno = 0; tlbno < num_tlbentries; ++tlbno) {
-		tlb = &tlbstash[cpu][tlbno];
-		if (pte_test(&tlb->tlb_lo0, PG_V) ||
-		    pte_test(&tlb->tlb_lo1, PG_V)) {
-			printf("TLB %2d vad 0x%0lx ",
-				tlbno, (long)(tlb->tlb_hi & 0xffffff00));
-		} else {
-			printf("TLB*%2d vad 0x%0lx ",
-				tlbno, (long)(tlb->tlb_hi & 0xffffff00));
-		}
-		printf("0=0x%0lx ", pfn_to_vad((long)tlb->tlb_lo0));
-		printf("%c", tlb->tlb_lo0 & PG_V ? 'V' : '-');
-		printf("%c", tlb->tlb_lo0 & PG_D ? 'D' : '-');
-		printf("%c", tlb->tlb_lo0 & PG_G ? 'G' : '-');
-		printf(" atr %x ", (tlb->tlb_lo0 >> 3) & 7);
-		printf("1=0x%0lx ", pfn_to_vad((long)tlb->tlb_lo1));
-		printf("%c", tlb->tlb_lo1 & PG_V ? 'V' : '-');
-		printf("%c", tlb->tlb_lo1 & PG_D ? 'D' : '-');
-		printf("%c", tlb->tlb_lo1 & PG_G ? 'G' : '-');
-		printf(" atr %x ", (tlb->tlb_lo1 >> 3) & 7);
-		printf(" sz=%x pid=%x\n", tlb->tlb_mask,
-		       (tlb->tlb_hi & 0x000000ff));
-	}
-}
-#endif	/* DDB */
-#endif

Modified: user/jmallett/octeon/sys/mips/mips/tlb.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/tlb.c	Sat Apr  3 07:19:31 2010	(r206122)
+++ user/jmallett/octeon/sys/mips/mips/tlb.c	Sat Apr  3 07:27:32 2010	(r206123)
@@ -26,6 +26,8 @@
  * $FreeBSD$
  */
 
+#include "opt_ddb.h"
+
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/systm.h>
@@ -137,3 +139,37 @@ tlb_invalidate_one(unsigned i)
 	mips_wr_index(i);
 	tlb_write_indexed();
 }
+
+#ifdef DDB
+#include <ddb/ddb.h>
+
+DB_SHOW_COMMAND(tlb, ddb_dump_tlb)
+{
+	register_t ehi, elo0, elo1;
+	unsigned i;
+
+	db_printf("Beginning TLB dump...\n");
+	for (i = 0; i < num_tlbentries; i++) {
+		if (i == mips_rd_wired()) {
+			if (i != 0)
+				db_printf("^^^ WIRED ENTRIES ^^^\n");
+			else
+				db_printf("(No wired entries.)\n");
+		}
+		mips_wr_index(i);
+		tlb_read();
+
+		ehi = mips_rd_entryhi();
+		elo0 = mips_rd_entrylo0();
+		elo1 = mips_rd_entrylo1();
+
+		if (elo0 == 0 && elo1 == 0)
+			continue;
+
+		db_printf("#%u\t=> %jx\n", i, (intmax_t)ehi);
+		db_printf(" Lo0\t%jx\n", (intmax_t)elo0);
+		db_printf(" Lo1\t%jx\n", (intmax_t)elo1);
+	}
+	db_printf("Finished.\n");
+}
+#endif

Modified: user/jmallett/octeon/sys/mips/mips/vm_machdep.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/vm_machdep.c	Sat Apr  3 07:19:31 2010	(r206122)
+++ user/jmallett/octeon/sys/mips/mips/vm_machdep.c	Sat Apr  3 07:27:32 2010	(r206123)
@@ -224,10 +224,10 @@ cpu_thread_swapin(struct thread *td)
 	 */
 	if (!(pte = pmap_segmap(kernel_pmap, td->td_kstack)))
 		panic("cpu_thread_swapin: invalid segmap");
-	pte += ((vm_offset_t)td->td_kstack >> PAGE_SHIFT) & (NPTEPG - 1);
+	pte += PDE_OFFSET(td->td_kstack);
 
 	for (i = 0; i < KSTACK_PAGES; i++) {
-		td->td_md.md_upte[i] = *pte & ~(PG_RO | PG_W);
+		td->td_md.md_upte[i] = *pte & ~TLBLO_SWBITS_MASK;
 		pte++;
 	}
 }
@@ -249,10 +249,10 @@ cpu_thread_alloc(struct thread *td)
 
 	if (!(pte = pmap_segmap(kernel_pmap, td->td_kstack)))
 		panic("cpu_thread_alloc: invalid segmap");
-	pte += ((vm_offset_t)td->td_kstack >> PAGE_SHIFT) & (NPTEPG - 1);
+	pte += PDE_OFFSET(td->td_kstack);
 
 	for (i = 0; i < KSTACK_PAGES; i++) {
-		td->td_md.md_upte[i] = *pte & ~(PG_RO | PG_W);
+		td->td_md.md_upte[i] = *pte & ~TLBLO_SWBITS_MASK;
 		pte++;
 	}
 }


More information about the svn-src-user mailing list