| .. | .. |
|---|
| 182 | 182 | int pvrdma_page_dir_insert_umem(struct pvrdma_page_dir *pdir, |
|---|
| 183 | 183 | struct ib_umem *umem, u64 offset) |
|---|
| 184 | 184 | { |
|---|
| 185 | + struct ib_block_iter biter; |
|---|
| 185 | 186 | u64 i = offset; |
|---|
| 186 | | - int j, entry; |
|---|
| 187 | | - int ret = 0, len = 0; |
|---|
| 188 | | - struct scatterlist *sg; |
|---|
| 187 | + int ret = 0; |
|---|
| 189 | 188 | |
|---|
| 190 | 189 | if (offset >= pdir->npages) |
|---|
| 191 | 190 | return -EINVAL; |
|---|
| 192 | 191 | |
|---|
| 193 | | - for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) { |
|---|
| 194 | | - len = sg_dma_len(sg) >> PAGE_SHIFT; |
|---|
| 195 | | - for (j = 0; j < len; j++) { |
|---|
| 196 | | - dma_addr_t addr = sg_dma_address(sg) + |
|---|
| 197 | | - (j << umem->page_shift); |
|---|
| 192 | + rdma_umem_for_each_dma_block (umem, &biter, PAGE_SIZE) { |
|---|
| 193 | + ret = pvrdma_page_dir_insert_dma( |
|---|
| 194 | + pdir, i, rdma_block_iter_dma_address(&biter)); |
|---|
| 195 | + if (ret) |
|---|
| 196 | + goto exit; |
|---|
| 198 | 197 | |
|---|
| 199 | | - ret = pvrdma_page_dir_insert_dma(pdir, i, addr); |
|---|
| 200 | | - if (ret) |
|---|
| 201 | | - goto exit; |
|---|
| 202 | | - |
|---|
| 203 | | - i++; |
|---|
| 204 | | - } |
|---|
| 198 | + i++; |
|---|
| 205 | 199 | } |
|---|
| 206 | 200 | |
|---|
| 207 | 201 | exit: |
|---|