From owner-svn-src-user@FreeBSD.ORG Tue Apr 6 05:52:22 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A028B106564A; Tue, 6 Apr 2010 05:52:22 +0000 (UTC) (envelope-from jmallett@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8F0C28FC0C; Tue, 6 Apr 2010 05:52:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o365qM9w062976; Tue, 6 Apr 2010 05:52:22 GMT (envelope-from jmallett@svn.freebsd.org) Received: (from jmallett@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o365qMtW062973; Tue, 6 Apr 2010 05:52:22 GMT (envelope-from jmallett@svn.freebsd.org) Message-Id: <201004060552.o365qMtW062973@svn.freebsd.org> From: Juli Mallett Date: Tue, 6 Apr 2010 05:52:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r206249 - in user/jmallett/octeon/sys/mips: include mips X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 06 Apr 2010 05:52:22 -0000 Author: jmallett Date: Tue Apr 6 05:52:22 2010 New Revision: 206249 URL: http://svn.freebsd.org/changeset/base/206249 Log: o) Retire pmap_segbase for the near future... o) Make pmap_segshift mask based on the number of page directory entries in the page directory. Exception processing code should do the same thing and then we should tune NPDEPG downwards so that we don't end up with (as we do with this commit) a bunch of empty page tables in the kernel page directory on N64. Of course, on N64 we should really switch to allocating virtual addresses from the XKSEG, which we could now do quite easily... Modified: user/jmallett/octeon/sys/mips/include/param.h user/jmallett/octeon/sys/mips/mips/pmap.c Modified: user/jmallett/octeon/sys/mips/include/param.h ============================================================================== --- user/jmallett/octeon/sys/mips/include/param.h Tue Apr 6 05:20:46 2010 (r206248) +++ user/jmallett/octeon/sys/mips/include/param.h Tue Apr 6 05:52:22 2010 (r206249) @@ -104,6 +104,7 @@ #define PAGE_SIZE (1<> SEGSHIFT)) -#define pmap_segbase(v) ((vm_offset_t)(intptr_t)(int32_t)((v) << SEGSHIFT)) +#define pmap_segshift(v) (((v) >> SEGSHIFT) & (NPDEPG - 1)) #define pmap_pde(m, v) (&((m)->pm_segtab[pmap_segshift((v))])) #define segtab_pde(m, v) ((m)[pmap_segshift((v))]) @@ -3099,127 +3098,6 @@ pmap_align_superpage(vm_object_t object, *addr = ((*addr + SEGOFSET) & ~SEGOFSET) + superpage_offset; } -int pmap_pid_dump(int pid); - -int -pmap_pid_dump(int pid) -{ - pmap_t pmap; - struct proc *p; - int npte = 0; - int index; - - sx_slock(&allproc_lock); - LIST_FOREACH(p, &allproc, p_list) { - if (p->p_pid != pid) - continue; - - if (p->p_vmspace) { - int i, j; - - printf("vmspace is %p\n", - p->p_vmspace); - index = 0; - pmap = vmspace_pmap(p->p_vmspace); - printf("pmap asid:%x generation:%x\n", - pmap->pm_asid[0].asid, - pmap->pm_asid[0].gen); - for (i = 0; i < NUSERPGTBLS; i++) { - pd_entry_t *pde; - pt_entry_t *pte; - unsigned base = pmap_segbase(i); - - pde = &pmap->pm_segtab[i]; - if (pde && *pde != 0) { - for (j = 0; j < 1024; j++) { - vm_offset_t va = base + - (j << PAGE_SHIFT); - - pte = pmap_pte(pmap, va); - if (pte && pte_test(pte, PG_V)) { - vm_offset_t pa; - vm_page_t m; - - pa = TLBLO_PTE_TO_PA(*pte); - m = PHYS_TO_VM_PAGE(pa); - printf("va: %p, pt: %p, h: %d, w: %d, f: 0x%x", - (void *)va, - (void *)pa, - m->hold_count, - m->wire_count, - m->flags); - npte++; - index++; - if (index >= 2) { - index = 0; - printf("\n"); - } else { - printf(" "); - } - } - } - } - } - } else { - printf("Process pid:%d has no vm_space\n", pid); - } - break; - } - sx_sunlock(&allproc_lock); - return npte; -} - - -#if defined(DEBUG) - -static void pads(pmap_t pm); -void pmap_pvdump(vm_offset_t pa); - -/* print address space of pmap*/ -static void -pads(pmap_t pm) -{ - unsigned va, i, j; - pt_entry_t *ptep; - - if (pm == kernel_pmap) - return; - for (i = 0; i < NPTEPG; i++) - if (pm->pm_segtab[i]) - for (j = 0; j < NPTEPG; j++) { - va = pmap_segbase(i) + (j << PAGE_SHIFT); - if (pm == kernel_pmap && va < KERNBASE) - continue; - if (pm != kernel_pmap && - va >= VM_MAXUSER_ADDRESS) - continue; - ptep = pmap_pte(pm, va); - if (pmap_pte_v(ptep)) - printf("%x:%x ", va, *(int *)ptep); - } - -} - -void -pmap_pvdump(vm_offset_t pa) -{ - pv_entry_t pv; - vm_page_t m; - - printf("pa %x", pa); - m = PHYS_TO_VM_PAGE(pa); - for (pv = TAILQ_FIRST(&m->md.pv_list); pv; - pv = TAILQ_NEXT(pv, pv_list)) { - printf(" -> pmap %p, va %x", (void *)pv->pv_pmap, pv->pv_va); - pads(pv->pv_pmap); - } - printf(" "); -} - -/* N/C */ -#endif - - /* * Allocate TLB address space tag (called ASID or TLBPID) and return it. * It takes almost as much or more time to search the TLB for a