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

Function pmap_copy_pages

freebsd/amd64/amd64/pmap.c:7808–7835  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7806int unmapped_buf_allowed = 1;
7807
7808void
7809pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[],
7810 vm_offset_t b_offset, int xfersize)
7811{
7812 void *a_cp, *b_cp;
7813 vm_page_t pages[2];
7814 vm_offset_t vaddr[2], a_pg_offset, b_pg_offset;
7815 int cnt;
7816 boolean_t mapped;
7817
7818 while (xfersize > 0) {
7819 a_pg_offset = a_offset & PAGE_MASK;
7820 pages[0] = ma[a_offset >> PAGE_SHIFT];
7821 b_pg_offset = b_offset & PAGE_MASK;
7822 pages[1] = mb[b_offset >> PAGE_SHIFT];
7823 cnt = min(xfersize, PAGE_SIZE - a_pg_offset);
7824 cnt = min(cnt, PAGE_SIZE - b_pg_offset);
7825 mapped = pmap_map_io_transient(pages, vaddr, 2, FALSE);
7826 a_cp = (char *)vaddr[0] + a_pg_offset;
7827 b_cp = (char *)vaddr[1] + b_pg_offset;
7828 bcopy(a_cp, b_cp, cnt);
7829 if (__predict_false(mapped))
7830 pmap_unmap_io_transient(pages, vaddr, 2, FALSE);
7831 a_offset += cnt;
7832 b_offset += cnt;
7833 xfersize -= cnt;
7834 }
7835}
7836
7837/*
7838 * Returns true if the pmap's pv is one of the first

Callers

nothing calls this directly

Calls 3

minFunction · 0.85
pmap_map_io_transientFunction · 0.70
pmap_unmap_io_transientFunction · 0.70

Tested by

no test coverage detected