| 7806 | int unmapped_buf_allowed = 1; |
| 7807 | |
| 7808 | void |
| 7809 | pmap_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 |
nothing calls this directly
no test coverage detected