Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Feb 2006 05:48:45 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 91864 for review
Message-ID:  <200602160548.k1G5mjhQ088171@repoman.freebsd.org>

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

Change 91864 by kmacy@kmacy_storage:sun4v_work on 2006/02/16 05:47:44

	T1 has physically indexed caches - allowing us to gut the virtual cache coloring
	but it does have a 3MB 12-way L2 so it could benefit from physical page coloring
	set the values in identcpu.c - ultimately want this to be keyed off of the machine description

Affected files ...

.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/cache.h#2 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pmap.h#3 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/identcpu.c#3 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/mem.c#2 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#5 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/uio_machdep.c#2 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/vm_machdep.c#3 edit

Differences ...

==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/cache.h#2 (text+ko) ====

@@ -47,13 +47,6 @@
 
 #include <dev/ofw/openfirm.h>
 
-#define	DCACHE_COLOR_BITS	(1)
-#define	DCACHE_COLORS		(1 << DCACHE_COLOR_BITS)
-#define	DCACHE_COLOR_MASK	(DCACHE_COLORS - 1)
-#define	DCACHE_COLOR(va)	(((va) >> PAGE_SHIFT) & DCACHE_COLOR_MASK)
-#define	DCACHE_OTHER_COLOR(color) \
-	((color) ^ DCACHE_COLOR_BITS)
-
 #define	DC_TAG_SHIFT	2
 #define	DC_VALID_SHIFT	0
 

==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/pmap.h#3 (text+ko) ====

@@ -52,8 +52,6 @@
 struct md_page {
 	TAILQ_HEAD(, tte) tte_list;
 	struct	pmap *pmap;
-	uint32_t colors[DCACHE_COLORS];
-	int32_t	color;
 	uint32_t flags;
 };
 

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

@@ -30,7 +30,11 @@
 void
 setPQL2(int *const size, int *const ways)
 {
-	return;
+	/* XXX SUN4V_FIXME - this is hardcoded for the T1
+	 * this info should really be pulled from the machine description
+	 */
+	*size = 3*1024*1024; 
+	*ways = 12;
 }
 
 void

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

@@ -91,7 +91,6 @@
 	vm_paddr_t pa;
 	vm_size_t cnt;
 	vm_page_t m;
-	int color;
 	int error;
 	int i;
 
@@ -135,12 +134,9 @@
 			if (m != NULL) {
 				if (ova == 0) {
 					ova = kmem_alloc_wait(kernel_map,
-					    PAGE_SIZE * DCACHE_COLORS);
+					    PAGE_SIZE);
 				}
-				if ((color = m->md.color) == -1)
-					va = ova;
-				else
-					va = ova + color * PAGE_SIZE;
+				va = ova;
 				pmap_qenter(va, &m, 1);
 				error = uiomove((void *)(va + off), cnt,
 				    uio);
@@ -177,7 +173,7 @@
 		/* else panic! */
 	}
 	if (ova != 0)
-		kmem_free_wakeup(kernel_map, ova, PAGE_SIZE * DCACHE_COLORS);
+		kmem_free_wakeup(kernel_map, ova, PAGE_SIZE);
 	return (error);
 }
 

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

@@ -273,6 +273,7 @@
 		panic("pmap_bootstrap: tsb unaligned\n");
 	tsb_kernel_phys = pa;
 	PANIC_IF(hv_mem_scrub(tsb_kernel_phys, tsb_kernel_size, &scrubbed));
+	PANIC_IF(scrubbed != tsb_kernel_size);
 	/*
 	 * Allocate and map the message buffer.
 	 */
@@ -293,15 +294,11 @@
 	 * properly, since we're allocating from phys_avail so the memory won't
 	 * have an associated vm_page_t.
 	 */
-	pa = pmap_bootstrap_alloc(roundup(KSTACK_PAGES, DCACHE_COLORS) *
-	    PAGE_SIZE);
+	pa = pmap_bootstrap_alloc(KSTACK_PAGES*PAGE_SIZE);
 	kstack0_phys = pa;
-	virtual_avail += roundup(KSTACK_GUARD_PAGES, DCACHE_COLORS) *
-	    PAGE_SIZE;
+	virtual_avail += KSTACK_GUARD_PAGES * PAGE_SIZE;
 	kstack0 = virtual_avail;
-	virtual_avail += roundup(KSTACK_PAGES, DCACHE_COLORS) * PAGE_SIZE;
-	KASSERT(DCACHE_COLOR(kstack0) == DCACHE_COLOR(kstack0_phys),
-	    ("pmap_bootstrap: kstack0 miscoloured"));
+	virtual_avail += KSTACK_PAGES * PAGE_SIZE;
 	for (i = 0; i < KSTACK_PAGES; i++) {
 		pa = kstack0_phys + i * PAGE_SIZE;
 		va = kstack0 + i * PAGE_SIZE;
@@ -456,7 +453,7 @@
 void 
 pmap_growkernel(vm_offset_t addr)
 {
-	panic("pmap_growkernel: can't grow kernel");		
+	
 }
 
 void 
@@ -567,7 +564,6 @@
 {
 
 	TAILQ_INIT(&m->md.tte_list);
-	m->md.color = DCACHE_COLOR(VM_PAGE_TO_PHYS(m));
 	m->md.flags = 0;
 	m->md.pmap = NULL;
 }
@@ -693,7 +689,9 @@
 void
 pmap_zero_page(vm_page_t m)
 {
-	UNIMPLEMENTED;
+	uint64_t bytes_zeroed;
+	PANIC_IF(hv_mem_scrub(VM_PAGE_TO_PHYS(m), PAGE_SIZE, &bytes_zeroed));
+	PANIC_IF(bytes_zeroed != PAGE_SIZE);
 }
 
 void
@@ -705,5 +703,7 @@
 void
 pmap_zero_page_idle(vm_page_t m)
 {
-	UNIMPLEMENTED;
+	uint64_t bytes_zeroed;
+	PANIC_IF(hv_mem_scrub(VM_PAGE_TO_PHYS(m), PAGE_SIZE, &bytes_zeroed));
+	PANIC_IF(bytes_zeroed != PAGE_SIZE);
 }

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

@@ -92,13 +92,8 @@
 		cnt = ulmin(cnt, PAGE_SIZE - page_offset);
 		m = ma[offset >> PAGE_SHIFT];
 		pa = VM_PAGE_TO_PHYS(m);
-		if (m->md.color != DCACHE_COLOR(pa)) {
-			sf = sf_buf_alloc(m, 0);
-			cp = (char *)sf_buf_kva(sf) + page_offset;
-		} else {
-			sf = NULL;
-			cp = (char *)TLB_PHYS_TO_DIRECT(pa) + page_offset;
-		}
+		sf = NULL;
+		cp = (char *)TLB_PHYS_TO_DIRECT(pa) + page_offset;
 		switch (uio->uio_segflg) {
 		case UIO_USERSPACE:
 			if (ticks - PCPU_GET(switchticks) >= hogticks)

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

@@ -485,13 +485,6 @@
 	}
 
 	pa = VM_PAGE_TO_PHYS(m);
-	if (m->md.color != DCACHE_COLOR(pa)) {
-		KASSERT(m->md.colors[0] == 0 && m->md.colors[1] == 0,
-		    ("uma_small_alloc: free page still has mappings!"));
-		PMAP_STATS_INC(uma_nsmall_alloc_oc);
-		m->md.color = DCACHE_COLOR(pa);
-		dcache_page_inval(pa);
-	}
 	va = (void *)TLB_PHYS_TO_DIRECT(pa);
 	if ((wait & M_ZERO) && (m->flags & PG_ZERO) == 0)
 		bzero(va, PAGE_SIZE);



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