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

Function pmap_mincore

freebsd/arm/arm/pmap-v6.c:6223–6264  ·  view source on GitHub ↗

* Perform the pmap work for mincore(2). If the page is not both referenced and * modified by this pmap, returns its physical address so that the caller can * find other mappings. */

Source from the content-addressed store, hash-verified

6221 * find other mappings.
6222 */
6223int
6224pmap_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *pap)
6225{
6226 pt1_entry_t *pte1p, pte1;
6227 pt2_entry_t *pte2p, pte2;
6228 vm_paddr_t pa;
6229 bool managed;
6230 int val;
6231
6232 PMAP_LOCK(pmap);
6233 pte1p = pmap_pte1(pmap, addr);
6234 pte1 = pte1_load(pte1p);
6235 if (pte1_is_section(pte1)) {
6236 pa = trunc_page(pte1_pa(pte1) | (addr & PTE1_OFFSET));
6237 managed = pte1_is_managed(pte1);
6238 val = MINCORE_PSIND(1) | MINCORE_INCORE;
6239 if (pte1_is_dirty(pte1))
6240 val |= MINCORE_MODIFIED | MINCORE_MODIFIED_OTHER;
6241 if (pte1 & PTE1_A)
6242 val |= MINCORE_REFERENCED | MINCORE_REFERENCED_OTHER;
6243 } else if (pte1_is_link(pte1)) {
6244 pte2p = pmap_pte2(pmap, addr);
6245 pte2 = pte2_load(pte2p);
6246 pmap_pte2_release(pte2p);
6247 pa = pte2_pa(pte2);
6248 managed = pte2_is_managed(pte2);
6249 val = MINCORE_INCORE;
6250 if (pte2_is_dirty(pte2))
6251 val |= MINCORE_MODIFIED | MINCORE_MODIFIED_OTHER;
6252 if (pte2 & PTE2_A)
6253 val |= MINCORE_REFERENCED | MINCORE_REFERENCED_OTHER;
6254 } else {
6255 managed = false;
6256 val = 0;
6257 }
6258 if ((val & (MINCORE_MODIFIED_OTHER | MINCORE_REFERENCED_OTHER)) !=
6259 (MINCORE_MODIFIED_OTHER | MINCORE_REFERENCED_OTHER) && managed) {
6260 *pap = pa;
6261 }
6262 PMAP_UNLOCK(pmap);
6263 return (val);
6264}
6265
6266void
6267pmap_kenter_device(vm_offset_t va, vm_size_t size, vm_paddr_t pa)

Callers

nothing calls this directly

Calls 13

pmap_pte1Function · 0.85
pte1_loadFunction · 0.85
pte1_is_sectionFunction · 0.85
pte1_paFunction · 0.85
pte1_is_managedFunction · 0.85
pte1_is_dirtyFunction · 0.85
pte1_is_linkFunction · 0.85
pmap_pte2Function · 0.85
pte2_loadFunction · 0.85
pmap_pte2_releaseFunction · 0.85
pte2_paFunction · 0.85
pte2_is_managedFunction · 0.85

Tested by

no test coverage detected