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

Function pmap_remove_ptes

freebsd/amd64/amd64/pmap.c:5971–6004  ·  view source on GitHub ↗

* Removes the specified range of addresses from the page table page. */

Source from the content-addressed store, hash-verified

5969 * Removes the specified range of addresses from the page table page.
5970 */
5971static bool
5972pmap_remove_ptes(pmap_t pmap, vm_offset_t sva, vm_offset_t eva,
5973 pd_entry_t *pde, struct spglist *free, struct rwlock **lockp)
5974{
5975 pt_entry_t PG_G, *pte;
5976 vm_offset_t va;
5977 bool anyvalid;
5978
5979 PMAP_LOCK_ASSERT(pmap, MA_OWNED);
5980 PG_G = pmap_global_bit(pmap);
5981 anyvalid = false;
5982 va = eva;
5983 for (pte = pmap_pde_to_pte(pde, sva); sva != eva; pte++,
5984 sva += PAGE_SIZE) {
5985 if (*pte == 0) {
5986 if (va != eva) {
5987 pmap_invalidate_range(pmap, va, sva);
5988 va = eva;
5989 }
5990 continue;
5991 }
5992 if ((*pte & PG_G) == 0)
5993 anyvalid = true;
5994 else if (va == eva)
5995 va = sva;
5996 if (pmap_remove_pte(pmap, pte, sva, *pde, free, lockp)) {
5997 sva += PAGE_SIZE;
5998 break;
5999 }
6000 }
6001 if (va != eva)
6002 pmap_invalidate_range(pmap, va, sva);
6003 return (anyvalid);
6004}
6005
6006/*
6007 * Remove the given range of addresses from the specified map.

Callers 2

pmap_removeFunction · 0.70
pmap_enter_pdeFunction · 0.70

Calls 4

pmap_global_bitFunction · 0.85
pmap_pde_to_pteFunction · 0.70
pmap_invalidate_rangeFunction · 0.70
pmap_remove_pteFunction · 0.70

Tested by

no test coverage detected