Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Mar 2006 04:23:09 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 93686 for review
Message-ID:  <200603210423.k2L4N9Vf097721@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=93686

Change 93686 by kmacy@kmacy_storage:sun4vtmp on 2006/03/21 04:23:06

	implement pmap_zero_page_area
	remove pmap_qenter hack
	remove tsb_set_tte call from pmap_kenter
	call invltlb in pmap_invalidate_range() to work around bug evidenced with sf_buf_alloc
	make DPRINTF a runtime conditional

Affected files ...

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

Differences ...

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

@@ -125,6 +125,7 @@
 static uma_zone_t pvzone;
 static struct vm_object pvzone_obj;
 static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0;
+int pmap_debug = 0;
 
 /*
  * Kernel pmap.
@@ -169,7 +170,7 @@
 #define UNIMPLEMENTED panic("%s not implemented", __FUNCTION__)
 #define IMPLEMENTME printf("don't forget %s not implemented\n", __FUNCTION__)
 #ifdef PMAP_DEBUG
-#define DPRINTF printf
+#define DPRINTF if (pmap_debug) printf
 #else
 #define DPRINTF(...)
 #endif
@@ -587,10 +588,14 @@
 			if (error != H_EOK)
 				panic("map_perm_addr returned error=%ld", error);
 			continue;
-		} else if (translations[i].om_start < VM_MIN_PROM_ADDRESS ||
+		} 
+#if 1
+		else if (translations[i].om_start < VM_MIN_PROM_ADDRESS ||
 			   translations[i].om_start > VM_MAX_PROM_ADDRESS) {
 			continue;
-		} else {
+		}
+#endif
+		else {
 			for (off = 0; off < translations[i].om_size;
 			     off += PAGE_SIZE) {
 				va = translations[i].om_start + off;
@@ -633,9 +638,11 @@
 	pm->pm_hashscratch = tte_hash_set_scratchpad_kernel(pm->pm_hash);
 
 	for (i = 0; i < sz; i++) {
+#if 1
 		if (translations[i].om_start < VM_MIN_PROM_ADDRESS ||
 		    translations[i].om_start > VM_MAX_PROM_ADDRESS)
 			continue;
+#endif
 		for (off = 0; off < translations[i].om_size; off += PAGE_SIZE) {
 			va = translations[i].om_start + off;
 			pa = TTE_GET_PA(translations[i].om_tte) + off;
@@ -705,7 +712,6 @@
 {
 	vm_offset_t addr, end_addr;
 
-	return;
 
 	end_addr = src_addr + len;
 
@@ -1065,6 +1071,9 @@
 pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
 {
 	vm_offset_t tva;
+	/* XXX */
+	invltlb();
+
 	if (pmap != kernel_pmap)
 		DPRINTF("pmap_invalidate_range(sva=%lx, eva=%lx)\n", sva, eva);
 	/* XXX SUN4V_FIXME - oversimplified logic */
@@ -1122,8 +1131,6 @@
 void
 pmap_kenter(vm_offset_t va, vm_paddr_t pa)
 {
-	tsb_set_tte(&kernel_pmap->pm_tsb, va, pa | TTE_KERNEL | VTD_8K, 
-		    kernel_pmap->pm_context);
 	tte_hash_insert(kernel_pmap->pm_hash, va, pa | TTE_KERNEL | VTD_8K);
 }
 
@@ -1154,7 +1161,6 @@
 void
 pmap_kremove(vm_offset_t va)
 { 
-
 	tte_hash_delete(kernel_pmap->pm_hash, va);
 }
 
@@ -1200,6 +1206,7 @@
 pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, 
 		    vm_pindex_t index, vm_size_t size)
 {
+	printf("pmap_object_init_pt\n");
 	return;
 }
 
@@ -1371,36 +1378,14 @@
 pmap_qenter(vm_offset_t sva, vm_page_t *m, int count)
 {
 	vm_offset_t va;
-	int tcount;
-	vm_page_t *tm;
-	
-	tm = m;
-	tcount = count;
 
 	va = sva;
-	while (tcount-- > 0) {
-		pmap_kenter(va, VM_PAGE_TO_PHYS(*tm));
+	while (count-- > 0) {
+		pmap_kenter(va, VM_PAGE_TO_PHYS(*m));
 		va += PAGE_SIZE;
-		tm++;
+		m++;
 	}
 	pmap_invalidate_range(kernel_pmap, sva, va);
-
-	/* disgusting hack to avoid TSB misses on kernel pages
-	 * this will need to be fixed some time soon
-	 */
-#if 0
-	tm = m;
-	tcount = count;
-
-	va = sva;
-	while (tcount-- > 0) {
-		tsb_set_tte(&kernel_pmap->pm_tsb, va, 
-			    VM_PAGE_TO_PHYS(*tm) | TTE_KERNEL | VTD_8K, 
-			    kernel_pmap->pm_context);	
-		va += PAGE_SIZE;
-		tm++;
-	}
-#endif
 }
 
 /*
@@ -1711,7 +1696,14 @@
 void
 pmap_zero_page_area(vm_page_t m, int off, int size)
 {
-	UNIMPLEMENTED;
+	vm_paddr_t pa;
+	vm_offset_t va;
+		
+	pa = VM_PAGE_TO_PHYS(m);
+	va = TLB_PHYS_TO_DIRECT(pa);
+	
+	bzero((char *)(va + off), size);
+
 }
 
 void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603210423.k2L4N9Vf097721>