Date: Thu, 22 May 2003 20:27:07 -0700 (PDT) From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 31670 for review Message-ID: <200305230327.h4N3R7iO001064@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=31670 Change 31670 by peter@peter_hammer on 2003/05/22 20:26:20 re-enable pmap_copy(). Thats all of the stubbed out functions repaired. Affected files ... .. //depot/projects/hammer/sys/amd64/amd64/pmap.c#11 edit Differences ... ==== //depot/projects/hammer/sys/amd64/amd64/pmap.c#11 (text+ko) ==== @@ -701,6 +701,16 @@ } /* + * Are we current address space or kernel? + */ +static __inline int +pmap_is_current(pmap_t pmap) +{ + return (pmap == kernel_pmap || + (pmap->pm_pml4[PML4PML4I] & PG_FRAME) == (PML4pml4e[0] & PG_FRAME)); +} + +/* * Routine: pmap_extract * Function: * Extract the physical page address associated @@ -2518,7 +2528,6 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, vm_offset_t src_addr) { -#if 0 vm_offset_t addr; vm_offset_t end_addr = src_addr + len; vm_offset_t pdnxt; @@ -2533,7 +2542,7 @@ for (addr = src_addr; addr < end_addr; addr = pdnxt) { pt_entry_t *src_pte, *dst_pte; vm_page_t dstmpte, srcmpte; - pd_entry_t srcptepaddr; + pd_entry_t srcptepaddr, *pde; unsigned ptepindex; if (addr >= UPT_MIN_ADDRESS) @@ -2551,13 +2560,25 @@ pdnxt = (addr + NBPDR) & ~PDRMASK; ptepindex = pmap_pde_pindex(addr); - srcptepaddr = src_pmap->pm_pdir[ptepindex]; + pde = pmap_pde(src_pmap, addr); + if (pde) + srcptepaddr = *pde; + else + continue; if (srcptepaddr == 0) continue; if (srcptepaddr & PG_PS) { - if (dst_pmap->pm_pdir[ptepindex] == 0) { - dst_pmap->pm_pdir[ptepindex] = srcptepaddr; + pde = pmap_pde(dst_pmap, addr); + if (pde == 0) { + /* + * XXX should do an allocpte here to + * instantiate the pde + */ + continue; + } + if (*pde == 0) { + *pde = srcptepaddr; dst_pmap->pm_stats.resident_count += NBPDR / PAGE_SIZE; } @@ -2610,7 +2631,6 @@ src_pte++; } } -#endif } /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200305230327.h4N3R7iO001064>