PERFORCE change 91864 for review
Kip Macy
kmacy at FreeBSD.org
Wed Feb 15 21:48:46 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=91864
Change 91864 by kmacy at 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);
More information about the p4-projects
mailing list