Lines Matching full:lnk
47 static int smc_ib_modify_qp_init(struct smc_link *lnk) in smc_ib_modify_qp_init() argument
54 qp_attr.port_num = lnk->ibport; in smc_ib_modify_qp_init()
57 return ib_modify_qp(lnk->roce_qp, &qp_attr, in smc_ib_modify_qp_init()
62 static int smc_ib_modify_qp_rtr(struct smc_link *lnk) in smc_ib_modify_qp_rtr() argument
72 qp_attr.path_mtu = min(lnk->path_mtu, lnk->peer_mtu); in smc_ib_modify_qp_rtr()
74 rdma_ah_set_port_num(&qp_attr.ah_attr, lnk->ibport); in smc_ib_modify_qp_rtr()
75 if (lnk->lgr->smc_version == SMC_V2 && lnk->lgr->uses_gateway) in smc_ib_modify_qp_rtr()
77 rdma_ah_set_grh(&qp_attr.ah_attr, NULL, 0, lnk->sgid_index, hop_lim, 0); in smc_ib_modify_qp_rtr()
78 rdma_ah_set_dgid_raw(&qp_attr.ah_attr, lnk->peer_gid); in smc_ib_modify_qp_rtr()
79 if (lnk->lgr->smc_version == SMC_V2 && lnk->lgr->uses_gateway) in smc_ib_modify_qp_rtr()
80 memcpy(&qp_attr.ah_attr.roce.dmac, lnk->lgr->nexthop_mac, in smc_ib_modify_qp_rtr()
81 sizeof(lnk->lgr->nexthop_mac)); in smc_ib_modify_qp_rtr()
83 memcpy(&qp_attr.ah_attr.roce.dmac, lnk->peer_mac, in smc_ib_modify_qp_rtr()
84 sizeof(lnk->peer_mac)); in smc_ib_modify_qp_rtr()
85 qp_attr.dest_qp_num = lnk->peer_qpn; in smc_ib_modify_qp_rtr()
86 qp_attr.rq_psn = lnk->peer_psn; /* starting receive packet seq # */ in smc_ib_modify_qp_rtr()
92 return ib_modify_qp(lnk->roce_qp, &qp_attr, qp_attr_mask); in smc_ib_modify_qp_rtr()
95 int smc_ib_modify_qp_rts(struct smc_link *lnk) in smc_ib_modify_qp_rts() argument
104 qp_attr.sq_psn = lnk->psn_initial; /* starting send packet seq # */ in smc_ib_modify_qp_rts()
108 return ib_modify_qp(lnk->roce_qp, &qp_attr, in smc_ib_modify_qp_rts()
114 int smc_ib_modify_qp_error(struct smc_link *lnk) in smc_ib_modify_qp_error() argument
120 return ib_modify_qp(lnk->roce_qp, &qp_attr, IB_QP_STATE); in smc_ib_modify_qp_error()
123 int smc_ib_ready_link(struct smc_link *lnk) in smc_ib_ready_link() argument
125 struct smc_link_group *lgr = smc_get_lgr(lnk); in smc_ib_ready_link()
128 rc = smc_ib_modify_qp_init(lnk); in smc_ib_ready_link()
132 rc = smc_ib_modify_qp_rtr(lnk); in smc_ib_ready_link()
135 smc_wr_remember_qp_attr(lnk); in smc_ib_ready_link()
136 rc = ib_req_notify_cq(lnk->smcibdev->roce_cq_recv, in smc_ib_ready_link()
140 rc = smc_wr_rx_post_init(lnk); in smc_ib_ready_link()
143 smc_wr_remember_qp_attr(lnk); in smc_ib_ready_link()
146 rc = smc_ib_modify_qp_rts(lnk); in smc_ib_ready_link()
149 smc_wr_remember_qp_attr(lnk); in smc_ib_ready_link()
340 if (lgr->lnk[i].state == SMC_LNK_UNUSED || in smc_ib_gid_check()
341 lgr->lnk[i].smcibdev != smcibdev) in smc_ib_gid_check()
343 if (!smc_ib_check_link_gid(lgr->lnk[i].gid, in smc_ib_gid_check()
445 void smc_ib_dealloc_protection_domain(struct smc_link *lnk) in smc_ib_dealloc_protection_domain() argument
447 if (lnk->roce_pd) in smc_ib_dealloc_protection_domain()
448 ib_dealloc_pd(lnk->roce_pd); in smc_ib_dealloc_protection_domain()
449 lnk->roce_pd = NULL; in smc_ib_dealloc_protection_domain()
452 int smc_ib_create_protection_domain(struct smc_link *lnk) in smc_ib_create_protection_domain() argument
456 lnk->roce_pd = ib_alloc_pd(lnk->smcibdev->ibdev, 0); in smc_ib_create_protection_domain()
457 rc = PTR_ERR_OR_ZERO(lnk->roce_pd); in smc_ib_create_protection_domain()
458 if (IS_ERR(lnk->roce_pd)) in smc_ib_create_protection_domain()
459 lnk->roce_pd = NULL; in smc_ib_create_protection_domain()
475 if (lgr->lnk[i].state == SMC_LNK_UNUSED || in smcr_diag_is_dev_critical()
476 lgr->lnk[i].smcibdev != smcibdev) in smcr_diag_is_dev_critical()
630 struct smc_link *lnk = (struct smc_link *)priv; in smc_ib_qp_event_handler() local
631 struct smc_ib_device *smcibdev = lnk->smcibdev; in smc_ib_qp_event_handler()
649 void smc_ib_destroy_queue_pair(struct smc_link *lnk) in smc_ib_destroy_queue_pair() argument
651 if (lnk->roce_qp) in smc_ib_destroy_queue_pair()
652 ib_destroy_qp(lnk->roce_qp); in smc_ib_destroy_queue_pair()
653 lnk->roce_qp = NULL; in smc_ib_destroy_queue_pair()
657 int smc_ib_create_queue_pair(struct smc_link *lnk) in smc_ib_create_queue_pair() argument
659 int sges_per_buf = (lnk->lgr->smc_version == SMC_V2) ? 2 : 1; in smc_ib_create_queue_pair()
662 .qp_context = lnk, in smc_ib_create_queue_pair()
663 .send_cq = lnk->smcibdev->roce_cq_send, in smc_ib_create_queue_pair()
664 .recv_cq = lnk->smcibdev->roce_cq_recv, in smc_ib_create_queue_pair()
681 lnk->roce_qp = ib_create_qp(lnk->roce_pd, &qp_attr); in smc_ib_create_queue_pair()
682 rc = PTR_ERR_OR_ZERO(lnk->roce_qp); in smc_ib_create_queue_pair()
683 if (IS_ERR(lnk->roce_qp)) in smc_ib_create_queue_pair()
684 lnk->roce_qp = NULL; in smc_ib_create_queue_pair()
686 smc_wr_remember_qp_attr(lnk); in smc_ib_create_queue_pair()
733 bool smc_ib_is_sg_need_sync(struct smc_link *lnk, in smc_ib_is_sg_need_sync() argument
741 for_each_sg(buf_slot->sgt[lnk->link_idx].sgl, sg, in smc_ib_is_sg_need_sync()
742 buf_slot->sgt[lnk->link_idx].nents, i) { in smc_ib_is_sg_need_sync()
745 if (dma_need_sync(lnk->smcibdev->ibdev->dma_device, in smc_ib_is_sg_need_sync()
757 void smc_ib_sync_sg_for_cpu(struct smc_link *lnk, in smc_ib_sync_sg_for_cpu() argument
764 if (!(buf_slot->is_dma_need_sync & (1U << lnk->link_idx))) in smc_ib_sync_sg_for_cpu()
768 for_each_sg(buf_slot->sgt[lnk->link_idx].sgl, sg, in smc_ib_sync_sg_for_cpu()
769 buf_slot->sgt[lnk->link_idx].nents, i) { in smc_ib_sync_sg_for_cpu()
772 ib_dma_sync_single_for_cpu(lnk->smcibdev->ibdev, in smc_ib_sync_sg_for_cpu()
780 void smc_ib_sync_sg_for_device(struct smc_link *lnk, in smc_ib_sync_sg_for_device() argument
787 if (!(buf_slot->is_dma_need_sync & (1U << lnk->link_idx))) in smc_ib_sync_sg_for_device()
791 for_each_sg(buf_slot->sgt[lnk->link_idx].sgl, sg, in smc_ib_sync_sg_for_device()
792 buf_slot->sgt[lnk->link_idx].nents, i) { in smc_ib_sync_sg_for_device()
795 ib_dma_sync_single_for_device(lnk->smcibdev->ibdev, in smc_ib_sync_sg_for_device()
803 int smc_ib_buf_map_sg(struct smc_link *lnk, in smc_ib_buf_map_sg() argument
809 mapped_nents = ib_dma_map_sg(lnk->smcibdev->ibdev, in smc_ib_buf_map_sg()
810 buf_slot->sgt[lnk->link_idx].sgl, in smc_ib_buf_map_sg()
811 buf_slot->sgt[lnk->link_idx].orig_nents, in smc_ib_buf_map_sg()
819 void smc_ib_buf_unmap_sg(struct smc_link *lnk, in smc_ib_buf_unmap_sg() argument
823 if (!buf_slot->sgt[lnk->link_idx].sgl->dma_address) in smc_ib_buf_unmap_sg()
826 ib_dma_unmap_sg(lnk->smcibdev->ibdev, in smc_ib_buf_unmap_sg()
827 buf_slot->sgt[lnk->link_idx].sgl, in smc_ib_buf_unmap_sg()
828 buf_slot->sgt[lnk->link_idx].orig_nents, in smc_ib_buf_unmap_sg()
830 buf_slot->sgt[lnk->link_idx].sgl->dma_address = 0; in smc_ib_buf_unmap_sg()