PERFORCE change 96050 for review

Kip Macy kmacy at FreeBSD.org
Tue Apr 25 07:02:11 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=96050

Change 96050 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/04/25 07:01:10

	add addition pm_active sanity check
	remove asserts from pmap_ipi that assume that it is only called on curpmap

Affected files ...

.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#37 edit

Differences ...

==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#37 (text+ko) ====

@@ -174,7 +174,14 @@
 #define UNIMPLEMENTED panic("%s not implemented", __FUNCTION__)
 #define IMPLEMENTME printf("don't forget %s not implemented\n", __FUNCTION__)
 #ifdef PMAP_DEBUG
-#define DPRINTF if (pmap_debug) printf
+#define KDPRINTF if (pmap_debug) printf
+#define DPRINTF \
+	if ((PCPU_GET(cpumask) & PCPU_GET(curpmap)->pm_active) == 0)	\
+   	panic("cpumask(0x%x) & active (0x%x) == 0 pid == %d\n",  \
+	      PCPU_GET(cpumask), PCPU_GET(curpmap)->pm_active, curthread->td_proc->p_pid); \
+if (pmap_debug) printf
+
+
 #else
 #define DPRINTF(...)
 #endif
@@ -356,7 +363,7 @@
 pmap_activate(struct thread *td)
 {
 	pmap_t pmap, oldpmap;
-	DPRINTF("activating pmap\n");
+	DPRINTF("activating pmap for %d\n", td->td_tid);
 
 	spinlock_enter();
 	pmap = vmspace_pmap(td->td_proc->p_vmspace);
@@ -433,7 +440,7 @@
 	for (i = 0, j = 0; i < sz; i++, j += 2) {
 		CTR2(KTR_PMAP, "start=%#lx size=%#lx\n", mra[i].mr_start,
 		    mra[i].mr_size);
-		DPRINTF("start=%#lx size=%#lx\n", mra[i].mr_start,
+		KDPRINTF("start=%#lx size=%#lx\n", mra[i].mr_start,
 		    mra[i].mr_size);
 		if (physmem != 0 && btoc(physsz + mra[i].mr_size) >= physmem) {
 			if (btoc(physsz) < physmem) {
@@ -465,13 +472,13 @@
 	qsort(translations, sz, sizeof (*translations), om_cmp);
 	for (i = 0; i < sz; i++) {
 		int j, k;
-		DPRINTF("om_size=%ld om_start=%lx om_tte=%lx\n", 
+		KDPRINTF("om_size=%ld om_start=%lx om_tte=%lx\n", 
 			translations[i].om_size, translations[i].om_start, 
 			translations[i].om_tte);
 		if (translations[i].om_size == PAGE_SIZE_4M && 
 		    (translations[i].om_start == KERNBASE ||
 		     translations[i].om_start == KERNBASE + PAGE_SIZE_4M)) {
-			DPRINTF("mapping permanent translation\n");
+			KDPRINTF("mapping permanent translation\n");
 			pa = TTE_GET_PA(translations[i].om_tte);
 			error = hv_mmu_map_perm_addr((char *)translations[i].om_start, 
 				KCONTEXT, pa | TTE_KERNEL | VTD_4M, MAP_ITLB | MAP_DTLB);
@@ -553,7 +560,7 @@
 	pa = pmap_bootstrap_alloc(tsb_8k_size);
 	if (pa & PAGE_MASK_4M)
 		panic("pmap_bootstrap: tsb unaligned\n");
-	DPRINTF("tsb_8k_size is 0x%lx, tsb_8k_pa is 0x%lx\n", tsb_8k_size, pa);
+	KDPRINTF("tsb_8k_size is 0x%lx, tsb_8k_pa is 0x%lx\n", tsb_8k_size, pa);
 	kernel_td[TSB8K_INDEX].hvtsb_idxpgsz = TTE8K;
 	kernel_td[TSB8K_INDEX].hvtsb_assoc = 1;
 	kernel_td[TSB8K_INDEX].hvtsb_ntte = (tsb_8k_size >> TTE_SHIFT);
@@ -584,7 +591,7 @@
 	tsb_4m_size = virtsz >> (PAGE_SHIFT_4M - TTE_SHIFT);
 	pa = pmap_bootstrap_alloc(tsb_4m_size);
 
-	DPRINTF("tsb_4m_pa is 0x%lx tsb_4m_size is 0x%lx\n", pa, tsb_4m_size);
+	KDPRINTF("tsb_4m_pa is 0x%lx tsb_4m_size is 0x%lx\n", pa, tsb_4m_size);
 	kernel_td[TSB4M_INDEX].hvtsb_idxpgsz = TTE4M;
 	kernel_td[TSB4M_INDEX].hvtsb_assoc = 1;
 	kernel_td[TSB4M_INDEX].hvtsb_ntte = (tsb_4m_size >> TTE_SHIFT);
@@ -629,7 +636,7 @@
 	 * Calculate the last available physical address.
 	 */
 	for (i = 0; phys_avail[i + 2] != 0; i += 2)
-		DPRINTF("phys_avail[%d]=0x%lx phys_avail[%d]=0x%lx\n",
+		KDPRINTF("phys_avail[%d]=0x%lx phys_avail[%d]=0x%lx\n",
 			i, phys_avail[i], i+1, phys_avail[i+1]);
 	Maxmem = sparc64_btop(phys_avail[i + 1]);
 	
@@ -641,7 +648,7 @@
 		    "translation: start=%#lx size=%#lx tte=%#lx",
 		    translations[i].om_start, translations[i].om_size,
 		    translations[i].om_tte);
-		DPRINTF("om_size=%ld om_start=%lx om_tte=%lx\n", 
+		KDPRINTF("om_size=%ld om_start=%lx om_tte=%lx\n", 
 		       translations[i].om_size, translations[i].om_start, 
 		       translations[i].om_tte);
 
@@ -707,13 +714,13 @@
 	pm->pm_hashscratch = tte_hash_set_scratchpad_kernel(pm->pm_hash);
 
 	for (i = 0; i < translations_size; i++) {
-		DPRINTF("om_size=%ld om_start=%lx om_tte=%lx\n", 
+		KDPRINTF("om_size=%ld om_start=%lx om_tte=%lx\n", 
 		       translations[i].om_size, translations[i].om_start, 
 		       translations[i].om_tte);
 
 		if (translations[i].om_start < VM_MIN_PROM_ADDRESS ||
 		    translations[i].om_start > VM_MAX_PROM_ADDRESS) {
-			DPRINTF("skipping\n");
+			KDPRINTF("skipping\n");
 			continue;
 		}
 		for (off = 0; off < translations[i].om_size; off += PAGE_SIZE) {
@@ -1144,18 +1151,6 @@
 		panic("cpumask(0x%x) != (1 << curcpu) (0x%x)\n", 
 		      cpumask, (1 << curcpu));
 
-	/* tlbactive should be set if we're using a pmap */
-	if ((cpumask & pmap->pm_active) == 0 && curthread->td_proc && curthread->td_proc->p_pid != 1) {
-		if (curthread->td_proc)
-			printf("%s not active\n", 
-			       curthread->td_proc->p_comm);
-		printf("td->pcb->pcb_kstack=0x%lx\n", curthread->td_pcb->pcb_kstack);
-		panic("cpumask(0x%x) & active (0x%x) == 0 pid == %d\n", 
-		      cpumask, pmap->pm_active, curthread->td_proc->p_pid);
-	}
-	if ((cpumask & pmap->pm_tlbactive) == 0)
-		panic("cpumask(0x%x) & tlbactive (0x%x) == 0\n", 
-		      cpumask, pmap->pm_tlbactive);
 #endif
 
 	if (cpumask == pmap->pm_tlbactive)


More information about the p4-projects mailing list