* Remove a single page from a process address space */
| 5945 | * Remove a single page from a process address space |
| 5946 | */ |
| 5947 | static void |
| 5948 | pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, |
| 5949 | struct spglist *free) |
| 5950 | { |
| 5951 | struct rwlock *lock; |
| 5952 | pt_entry_t *pte, PG_V; |
| 5953 | |
| 5954 | PG_V = pmap_valid_bit(pmap); |
| 5955 | PMAP_LOCK_ASSERT(pmap, MA_OWNED); |
| 5956 | if ((*pde & PG_V) == 0) |
| 5957 | return; |
| 5958 | pte = pmap_pde_to_pte(pde, va); |
| 5959 | if ((*pte & PG_V) == 0) |
| 5960 | return; |
| 5961 | lock = NULL; |
| 5962 | pmap_remove_pte(pmap, pte, va, *pde, free, &lock); |
| 5963 | if (lock != NULL) |
| 5964 | rw_wunlock(lock); |
| 5965 | pmap_invalidate_page(pmap, va); |
| 5966 | } |
| 5967 | |
| 5968 | /* |
| 5969 | * Removes the specified range of addresses from the page table page. |
no test coverage detected