diff options
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/uverbs_cmd.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/core/verbs.c | 46 |
2 files changed, 47 insertions, 1 deletions
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index 112b37cd6895..56feab6c251e 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c | |||
@@ -917,7 +917,7 @@ ssize_t ib_uverbs_poll_cq(struct ib_uverbs_file *file, | |||
917 | resp->wc[i].opcode = wc[i].opcode; | 917 | resp->wc[i].opcode = wc[i].opcode; |
918 | resp->wc[i].vendor_err = wc[i].vendor_err; | 918 | resp->wc[i].vendor_err = wc[i].vendor_err; |
919 | resp->wc[i].byte_len = wc[i].byte_len; | 919 | resp->wc[i].byte_len = wc[i].byte_len; |
920 | resp->wc[i].imm_data = (__u32 __force) wc[i].imm_data; | 920 | resp->wc[i].ex.imm_data = (__u32 __force) wc[i].ex.imm_data; |
921 | resp->wc[i].qp_num = wc[i].qp->qp_num; | 921 | resp->wc[i].qp_num = wc[i].qp->qp_num; |
922 | resp->wc[i].src_qp = wc[i].src_qp; | 922 | resp->wc[i].src_qp = wc[i].src_qp; |
923 | resp->wc[i].wc_flags = wc[i].wc_flags; | 923 | resp->wc[i].wc_flags = wc[i].wc_flags; |
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c index 9f399d3a42b4..e0fbe5975866 100644 --- a/drivers/infiniband/core/verbs.c +++ b/drivers/infiniband/core/verbs.c | |||
@@ -753,6 +753,52 @@ int ib_dereg_mr(struct ib_mr *mr) | |||
753 | } | 753 | } |
754 | EXPORT_SYMBOL(ib_dereg_mr); | 754 | EXPORT_SYMBOL(ib_dereg_mr); |
755 | 755 | ||
756 | struct ib_mr *ib_alloc_fast_reg_mr(struct ib_pd *pd, int max_page_list_len) | ||
757 | { | ||
758 | struct ib_mr *mr; | ||
759 | |||
760 | if (!pd->device->alloc_fast_reg_mr) | ||
761 | return ERR_PTR(-ENOSYS); | ||
762 | |||
763 | mr = pd->device->alloc_fast_reg_mr(pd, max_page_list_len); | ||
764 | |||
765 | if (!IS_ERR(mr)) { | ||
766 | mr->device = pd->device; | ||
767 | mr->pd = pd; | ||
768 | mr->uobject = NULL; | ||
769 | atomic_inc(&pd->usecnt); | ||
770 | atomic_set(&mr->usecnt, 0); | ||
771 | } | ||
772 | |||
773 | return mr; | ||
774 | } | ||
775 | EXPORT_SYMBOL(ib_alloc_fast_reg_mr); | ||
776 | |||
777 | struct ib_fast_reg_page_list *ib_alloc_fast_reg_page_list(struct ib_device *device, | ||
778 | int max_page_list_len) | ||
779 | { | ||
780 | struct ib_fast_reg_page_list *page_list; | ||
781 | |||
782 | if (!device->alloc_fast_reg_page_list) | ||
783 | return ERR_PTR(-ENOSYS); | ||
784 | |||
785 | page_list = device->alloc_fast_reg_page_list(device, max_page_list_len); | ||
786 | |||
787 | if (!IS_ERR(page_list)) { | ||
788 | page_list->device = device; | ||
789 | page_list->max_page_list_len = max_page_list_len; | ||
790 | } | ||
791 | |||
792 | return page_list; | ||
793 | } | ||
794 | EXPORT_SYMBOL(ib_alloc_fast_reg_page_list); | ||
795 | |||
796 | void ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list) | ||
797 | { | ||
798 | page_list->device->free_fast_reg_page_list(page_list); | ||
799 | } | ||
800 | EXPORT_SYMBOL(ib_free_fast_reg_page_list); | ||
801 | |||
756 | /* Memory windows */ | 802 | /* Memory windows */ |
757 | 803 | ||
758 | struct ib_mw *ib_alloc_mw(struct ib_pd *pd) | 804 | struct ib_mw *ib_alloc_mw(struct ib_pd *pd) |