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

Function pmap_copy_pages

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

Source from the content-addressed store, hash-verified

5946int unmapped_buf_allowed = 1;
5947
5948void
5949pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[],
5950 vm_offset_t b_offset, int xfersize)
5951{
5952 pt2_entry_t *cmap1_pte2p, *cmap2_pte2p;
5953 vm_page_t a_pg, b_pg;
5954 char *a_cp, *b_cp;
5955 vm_offset_t a_pg_offset, b_pg_offset;
5956 struct pcpu *pc;
5957 int cnt;
5958
5959 sched_pin();
5960 pc = get_pcpu();
5961 cmap1_pte2p = pc->pc_cmap1_pte2p;
5962 cmap2_pte2p = pc->pc_cmap2_pte2p;
5963 mtx_lock(&pc->pc_cmap_lock);
5964 if (pte2_load(cmap1_pte2p) != 0)
5965 panic("pmap_copy_pages: CMAP1 busy");
5966 if (pte2_load(cmap2_pte2p) != 0)
5967 panic("pmap_copy_pages: CMAP2 busy");
5968 while (xfersize > 0) {
5969 a_pg = ma[a_offset >> PAGE_SHIFT];
5970 a_pg_offset = a_offset & PAGE_MASK;
5971 cnt = min(xfersize, PAGE_SIZE - a_pg_offset);
5972 b_pg = mb[b_offset >> PAGE_SHIFT];
5973 b_pg_offset = b_offset & PAGE_MASK;
5974 cnt = min(cnt, PAGE_SIZE - b_pg_offset);
5975 pte2_store(cmap1_pte2p, PTE2_KERN_NG(VM_PAGE_TO_PHYS(a_pg),
5976 PTE2_AP_KR | PTE2_NM, vm_page_pte2_attr(a_pg)));
5977 tlb_flush_local((vm_offset_t)pc->pc_cmap1_addr);
5978 pte2_store(cmap2_pte2p, PTE2_KERN_NG(VM_PAGE_TO_PHYS(b_pg),
5979 PTE2_AP_KRW, vm_page_pte2_attr(b_pg)));
5980 tlb_flush_local((vm_offset_t)pc->pc_cmap2_addr);
5981 a_cp = pc->pc_cmap1_addr + a_pg_offset;
5982 b_cp = pc->pc_cmap2_addr + b_pg_offset;
5983 bcopy(a_cp, b_cp, cnt);
5984 a_offset += cnt;
5985 b_offset += cnt;
5986 xfersize -= cnt;
5987 }
5988 pte2_clear(cmap1_pte2p);
5989 tlb_flush((vm_offset_t)pc->pc_cmap1_addr);
5990 pte2_clear(cmap2_pte2p);
5991 tlb_flush((vm_offset_t)pc->pc_cmap2_addr);
5992 sched_unpin();
5993 mtx_unlock(&pc->pc_cmap_lock);
5994}
5995
5996vm_offset_t
5997pmap_quick_enter_page(vm_page_t m)

Callers

nothing calls this directly

Calls 13

sched_pinFunction · 0.85
get_pcpuFunction · 0.85
pte2_loadFunction · 0.85
minFunction · 0.85
pte2_storeFunction · 0.85
vm_page_pte2_attrFunction · 0.85
tlb_flush_localFunction · 0.85
pte2_clearFunction · 0.85
tlb_flushFunction · 0.85
sched_unpinFunction · 0.85
mtx_lockFunction · 0.50
panicFunction · 0.50

Tested by

no test coverage detected