Lines Matching refs:iomr

901 static void rs_release_iomap_mr(struct rs_iomap_mr *iomr)  in rs_release_iomap_mr()  argument
903 if (atomic_fetch_sub(&iomr->refcnt, 1) != 1) in rs_release_iomap_mr()
906 dlist_remove(&iomr->entry); in rs_release_iomap_mr()
907 ibv_dereg_mr(iomr->mr); in rs_release_iomap_mr()
908 if (iomr->index >= 0) in rs_release_iomap_mr()
909 iomr->mr = NULL; in rs_release_iomap_mr()
911 free(iomr); in rs_release_iomap_mr()
916 struct rs_iomap_mr *iomr; in rs_free_iomappings() local
919 iomr = container_of(rs->iomap_list.next, in rs_free_iomappings()
921 riounmap(rs->index, iomr->mr->addr, iomr->mr->length); in rs_free_iomappings()
924 iomr = container_of(rs->iomap_queue.next, in rs_free_iomappings()
926 riounmap(rs->index, iomr->mr->addr, iomr->mr->length); in rs_free_iomappings()
1797 static int rs_write_iomap(struct rsocket *rs, struct rs_iomap_mr *iomr, in rs_write_iomap() argument
1808 addr = rs->remote_iomap.addr + iomr->index * sizeof(struct rs_iomap); in rs_write_iomap()
1809 return rs_post_write_msg(rs, sgl, nsge, rs_msg_set(RS_OP_IOMAP_SGL, iomr->index), in rs_write_iomap()
2534 struct rs_iomap_mr *iomr; in rs_send_iomaps() local
2552 iomr = container_of(rs->iomap_queue.next, struct rs_iomap_mr, entry); in rs_send_iomaps()
2554 iom.offset = iomr->offset; in rs_send_iomaps()
2555 iom.sge.addr = (uintptr_t) iomr->mr->addr; in rs_send_iomaps()
2556 iom.sge.length = iomr->mr->length; in rs_send_iomaps()
2557 iom.sge.key = iomr->mr->rkey; in rs_send_iomaps()
2559 iom.offset = bswap_64(iomr->offset); in rs_send_iomaps()
2560 iom.sge.addr = bswap_64((uintptr_t) iomr->mr->addr); in rs_send_iomaps()
2561 iom.sge.length = bswap_32(iomr->mr->length); in rs_send_iomaps()
2562 iom.sge.key = bswap_32(iomr->mr->rkey); in rs_send_iomaps()
2569 ret = rs_write_iomap(rs, iomr, &sge, 1, IBV_SEND_INLINE); in rs_send_iomaps()
2573 ret = rs_write_iomap(rs, iomr, rs->ssgl, 1, 0); in rs_send_iomaps()
2585 ret = rs_write_iomap(rs, iomr, rs->ssgl, 2, 0); in rs_send_iomaps()
2588 dlist_remove(&iomr->entry); in rs_send_iomaps()
2589 dlist_insert_tail(&iomr->entry, &rs->iomap_list); in rs_send_iomaps()
3772 struct rs_iomap_mr *iomr; in riomap() local
3781 iomr = rs_get_iomap_mr(rs); in riomap()
3784 iomr = calloc(1, sizeof(*iomr)); in riomap()
3785 iomr->index = -1; in riomap()
3787 if (!iomr) { in riomap()
3792 iomr->mr = ibv_reg_mr(rs->cm_id->pd, buf, len, access); in riomap()
3793 if (!iomr->mr) { in riomap()
3794 if (iomr->index < 0) in riomap()
3795 free(iomr); in riomap()
3802 iomr->offset = offset; in riomap()
3803 atomic_store(&iomr->refcnt, 1); in riomap()
3805 if (iomr->index >= 0) { in riomap()
3806 dlist_insert_tail(&iomr->entry, &rs->iomap_queue); in riomap()
3809 dlist_insert_tail(&iomr->entry, &rs->iomap_list); in riomap()
3819 struct rs_iomap_mr *iomr; in riounmap() local
3828 iomr = container_of(entry, struct rs_iomap_mr, entry); in riounmap()
3829 if (iomr->mr->addr == buf && iomr->mr->length == len) { in riounmap()
3830 rs_release_iomap_mr(iomr); in riounmap()
3837 iomr = container_of(entry, struct rs_iomap_mr, entry); in riounmap()
3838 if (iomr->mr->addr == buf && iomr->mr->length == len) { in riounmap()
3839 rs_release_iomap_mr(iomr); in riounmap()