.. | .. |
---|
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: |
---|