&pgt_page_allocator);
&pgt_allocator);
pmap_init(){	int n, npages;	vsize_t size;	vaddr_t addr;	npages = 0;	for (n = 0; n < vm_nphysseg; n++)		npages += vm_physmem[n].end - vm_physmem[n].start;	size = npages * sizeof(struct pvlist);	size = round_page(size);	addr = uvm_km_zalloc(kernel_map, size);	if (addr == 0)		panic("pmap_init: no memory for pv_list");	for (n = 0; n < vm_nphysseg; n++) {		vm_physmem[n].pmseg.pv_head = (struct pvlist *)addr;		addr += (vm_physmem[n].end - vm_physmem[n].start) *			sizeof(struct pvlist);	}	pool_init(&pvpool, sizeof(struct pvlist), 0, 0, 0, "pvpl", NULL);	/*	 * We can set it here since it's only used in pmap_enter to see	 * if pv lists have been mapped.	 */	pmap_initialized = 1;#if defined(SUN4M)        if (CPU_ISSUN4M) {                /*                 * The SRMMU only ever needs chunks in one of two sizes:                 * 1024 (for region level tables) and 256 (for segment                 * and page level tables).                 */                int n;                n = SRMMU_L1SIZE * sizeof(int);                pool_init(&L1_pool, n, n, 0, 0, "L1 pagetable",		    &pgt_page_allocator);                n = SRMMU_L2SIZE * sizeof(int);                pool_init(&L23_pool, n, n, 0, 0, "L2/L3 pagetable",                    &pgt_page_allocator);        }#endif}