diff options
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_mr.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_mr.c b/drivers/infiniband/hw/ipath/ipath_mr.c index 8cc8598d6c69..31e70732e369 100644 --- a/drivers/infiniband/hw/ipath/ipath_mr.c +++ b/drivers/infiniband/hw/ipath/ipath_mr.c | |||
@@ -210,9 +210,15 @@ struct ib_mr *ipath_reg_user_mr(struct ib_pd *pd, struct ib_umem *region, | |||
210 | m = 0; | 210 | m = 0; |
211 | n = 0; | 211 | n = 0; |
212 | list_for_each_entry(chunk, ®ion->chunk_list, list) { | 212 | list_for_each_entry(chunk, ®ion->chunk_list, list) { |
213 | for (i = 0; i < chunk->nmap; i++) { | 213 | for (i = 0; i < chunk->nents; i++) { |
214 | mr->mr.map[m]->segs[n].vaddr = | 214 | void *vaddr; |
215 | page_address(chunk->page_list[i].page); | 215 | |
216 | vaddr = page_address(chunk->page_list[i].page); | ||
217 | if (!vaddr) { | ||
218 | ret = ERR_PTR(-EINVAL); | ||
219 | goto bail; | ||
220 | } | ||
221 | mr->mr.map[m]->segs[n].vaddr = vaddr; | ||
216 | mr->mr.map[m]->segs[n].length = region->page_size; | 222 | mr->mr.map[m]->segs[n].length = region->page_size; |
217 | n++; | 223 | n++; |
218 | if (n == IPATH_SEGSZ) { | 224 | if (n == IPATH_SEGSZ) { |