From owner-p4-projects@FreeBSD.ORG Thu Feb 16 05:48:46 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 19B8016A423; Thu, 16 Feb 2006 05:48:46 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C9B6B16A420 for ; Thu, 16 Feb 2006 05:48:45 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 85DDA43D45 for ; Thu, 16 Feb 2006 05:48:45 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k1G5mjQ2088174 for ; Thu, 16 Feb 2006 05:48:45 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k1G5mjhQ088171 for perforce@freebsd.org; Thu, 16 Feb 2006 05:48:45 GMT (envelope-from kmacy@freebsd.org) Date: Thu, 16 Feb 2006 05:48:45 GMT Message-Id: <200602160548.k1G5mjhQ088171@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 91864 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Feb 2006 05:48:46 -0000 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 -#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);