MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_release

Function pmap_release

freebsd/amd64/amd64/pmap.c:4644–4686  ·  view source on GitHub ↗

* Release any resources held by the given physical map. * Called when a pmap initialized by pmap_pinit is being released. * Should only be called if the map contains no valid mappings. */

Source from the content-addressed store, hash-verified

4642 * Should only be called if the map contains no valid mappings.
4643 */
4644void
4645pmap_release(pmap_t pmap)
4646{
4647 vm_page_t m;
4648 int i;
4649
4650 KASSERT(pmap->pm_stats.resident_count == 0,
4651 ("pmap_release: pmap %p resident count %ld != 0",
4652 pmap, pmap->pm_stats.resident_count));
4653 KASSERT(vm_radix_is_empty(&pmap->pm_root),
4654 ("pmap_release: pmap %p has reserved page table page(s)",
4655 pmap));
4656 KASSERT(CPU_EMPTY(&pmap->pm_active),
4657 ("releasing active pmap %p", pmap));
4658
4659 m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pmap->pm_pmltop));
4660
4661 if (pmap_is_la57(pmap)) {
4662 pmap->pm_pmltop[pmap_pml5e_index(UPT_MAX_ADDRESS)] = 0;
4663 pmap->pm_pmltop[PML5PML5I] = 0;
4664 } else {
4665 for (i = 0; i < NKPML4E; i++) /* KVA */
4666 pmap->pm_pmltop[KPML4BASE + i] = 0;
4667 for (i = 0; i < ndmpdpphys; i++)/* Direct Map */
4668 pmap->pm_pmltop[DMPML4I + i] = 0;
4669 pmap->pm_pmltop[PML4PML4I] = 0; /* Recursive Mapping */
4670 for (i = 0; i < lm_ents; i++) /* Large Map */
4671 pmap->pm_pmltop[LMSPML4I + i] = 0;
4672 }
4673
4674 vm_page_unwire_noq(m);
4675 vm_page_free_zero(m);
4676
4677 if (pmap->pm_pmltopu != NULL) {
4678 m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pmap->
4679 pm_pmltopu));
4680 vm_page_unwire_noq(m);
4681 vm_page_free(m);
4682 }
4683 if (pmap->pm_type == PT_X86 &&
4684 (cpu_stdext_feature2 & CPUID_STDEXT2_PKU) != 0)
4685 rangeset_fini(&pmap->pm_pkru);
4686}
4687
4688static int
4689kvm_size(SYSCTL_HANDLER_ARGS)

Callers

nothing calls this directly

Calls 8

vm_radix_is_emptyFunction · 0.85
PHYS_TO_VM_PAGEFunction · 0.85
pmap_is_la57Function · 0.85
pmap_pml5e_indexFunction · 0.85
vm_page_unwire_noqFunction · 0.85
vm_page_free_zeroFunction · 0.85
vm_page_freeFunction · 0.85
rangeset_finiFunction · 0.85

Tested by

no test coverage detected