Lines Matching refs:my_qp
281 struct ehca_qp *my_qp, in init_qp_queue() argument
327 my_qp->ipz_qp_handle, in init_qp_queue()
330 my_qp->galpas.kernel); in init_qp_queue()
338 vpage = ipz_qpageit_get_inc(&my_qp->ipz_rqueue); in init_qp_queue()
458 struct ehca_qp *my_qp, *my_srq = NULL; in internal_create_qp() local
612 my_qp = kmem_cache_zalloc(qp_cache, GFP_KERNEL); in internal_create_qp()
613 if (!my_qp) { in internal_create_qp()
624 atomic_set(&my_qp->nr_events, 0); in internal_create_qp()
625 init_waitqueue_head(&my_qp->wait_completion); in internal_create_qp()
626 spin_lock_init(&my_qp->spinlock_s); in internal_create_qp()
627 spin_lock_init(&my_qp->spinlock_r); in internal_create_qp()
628 my_qp->qp_type = qp_type; in internal_create_qp()
629 my_qp->ext_type = parms.ext_type; in internal_create_qp()
630 my_qp->state = IB_QPS_RESET; in internal_create_qp()
633 my_qp->recv_cq = in internal_create_qp()
636 my_qp->send_cq = in internal_create_qp()
642 ret = idr_alloc(&ehca_qp_idr, my_qp, 0, 0x2000000, GFP_NOWAIT); in internal_create_qp()
644 my_qp->token = ret; in internal_create_qp()
660 parms.srq_token = my_qp->token; in internal_create_qp()
680 parms.token = my_qp->token; in internal_create_qp()
683 if (my_qp->send_cq) in internal_create_qp()
684 parms.send_cq_handle = my_qp->send_cq->ipz_cq_handle; in internal_create_qp()
685 if (my_qp->recv_cq) in internal_create_qp()
686 parms.recv_cq_handle = my_qp->recv_cq->ipz_cq_handle; in internal_create_qp()
698 if (HAS_SQ(my_qp)) in internal_create_qp()
701 if (HAS_RQ(my_qp)) in internal_create_qp()
716 ib_qp_num = my_qp->real_qp_num = parms.real_qp_num; in internal_create_qp()
717 my_qp->ipz_qp_handle = parms.qp_handle; in internal_create_qp()
718 my_qp->galpas = parms.galpas; in internal_create_qp()
759 if (HAS_SQ(my_qp)) { in internal_create_qp()
761 shca, my_pd, my_qp, &my_qp->ipz_squeue, 0, in internal_create_qp()
762 HAS_RQ(my_qp) ? H_PAGE_REGISTERED : H_SUCCESS, in internal_create_qp()
771 my_qp->sq_map.entries = my_qp->ipz_squeue.queue_length / in internal_create_qp()
772 my_qp->ipz_squeue.qe_size; in internal_create_qp()
773 my_qp->sq_map.map = vmalloc(my_qp->sq_map.entries * in internal_create_qp()
775 if (!my_qp->sq_map.map) { in internal_create_qp()
780 INIT_LIST_HEAD(&my_qp->sq_err_node); in internal_create_qp()
782 reset_queue_map(&my_qp->sq_map); in internal_create_qp()
786 if (HAS_RQ(my_qp)) { in internal_create_qp()
788 shca, my_pd, my_qp, &my_qp->ipz_rqueue, 1, in internal_create_qp()
796 my_qp->rq_map.entries = my_qp->ipz_rqueue.queue_length / in internal_create_qp()
797 my_qp->ipz_rqueue.qe_size; in internal_create_qp()
798 my_qp->rq_map.map = vmalloc(my_qp->rq_map.entries * in internal_create_qp()
800 if (!my_qp->rq_map.map) { in internal_create_qp()
805 INIT_LIST_HEAD(&my_qp->rq_err_node); in internal_create_qp()
807 reset_queue_map(&my_qp->rq_map); in internal_create_qp()
811 my_qp->rq_map = my_srq->rq_map; in internal_create_qp()
812 INIT_LIST_HEAD(&my_qp->rq_err_node); in internal_create_qp()
814 my_qp->ipz_rqueue = my_srq->ipz_rqueue; in internal_create_qp()
818 my_qp->ib_srq.pd = &my_pd->ib_pd; in internal_create_qp()
819 my_qp->ib_srq.device = my_pd->ib_pd.device; in internal_create_qp()
821 my_qp->ib_srq.srq_context = init_attr->qp_context; in internal_create_qp()
822 my_qp->ib_srq.event_handler = init_attr->event_handler; in internal_create_qp()
824 my_qp->ib_qp.qp_num = ib_qp_num; in internal_create_qp()
825 my_qp->ib_qp.pd = &my_pd->ib_pd; in internal_create_qp()
826 my_qp->ib_qp.device = my_pd->ib_pd.device; in internal_create_qp()
828 my_qp->ib_qp.recv_cq = init_attr->recv_cq; in internal_create_qp()
829 my_qp->ib_qp.send_cq = init_attr->send_cq; in internal_create_qp()
831 my_qp->ib_qp.qp_type = qp_type; in internal_create_qp()
832 my_qp->ib_qp.srq = init_attr->srq; in internal_create_qp()
834 my_qp->ib_qp.qp_context = init_attr->qp_context; in internal_create_qp()
835 my_qp->ib_qp.event_handler = init_attr->event_handler; in internal_create_qp()
843 my_qp->init_attr = *init_attr; in internal_create_qp()
847 &my_qp->ib_qp; in internal_create_qp()
852 my_qp->mod_qp_parm = in internal_create_qp()
854 sizeof(*my_qp->mod_qp_parm), in internal_create_qp()
856 if (!my_qp->mod_qp_parm) { in internal_create_qp()
866 h_ret = ehca_define_sqp(shca, my_qp, init_attr); in internal_create_qp()
868 kfree(my_qp->mod_qp_parm); in internal_create_qp()
869 my_qp->mod_qp_parm = NULL; in internal_create_qp()
878 if (my_qp->send_cq) { in internal_create_qp()
879 ret = ehca_cq_assign_qp(my_qp->send_cq, my_qp); in internal_create_qp()
892 resp.qp_num = my_qp->real_qp_num; in internal_create_qp()
893 resp.token = my_qp->token; in internal_create_qp()
894 resp.qp_type = my_qp->qp_type; in internal_create_qp()
895 resp.ext_type = my_qp->ext_type; in internal_create_qp()
896 resp.qkey = my_qp->qkey; in internal_create_qp()
897 resp.real_qp_num = my_qp->real_qp_num; in internal_create_qp()
899 if (HAS_SQ(my_qp)) in internal_create_qp()
900 queue2resp(&resp.ipz_squeue, &my_qp->ipz_squeue); in internal_create_qp()
901 if (HAS_RQ(my_qp)) in internal_create_qp()
902 queue2resp(&resp.ipz_rqueue, &my_qp->ipz_rqueue); in internal_create_qp()
904 (my_qp->galpas.user.fw_handle & (PAGE_SIZE - 1)); in internal_create_qp()
913 return my_qp; in internal_create_qp()
916 ehca_cq_unassign_qp(my_qp->send_cq, my_qp->real_qp_num); in internal_create_qp()
919 kfree(my_qp->mod_qp_parm); in internal_create_qp()
922 if (HAS_RQ(my_qp) && !is_user) in internal_create_qp()
923 vfree(my_qp->rq_map.map); in internal_create_qp()
926 if (HAS_RQ(my_qp)) in internal_create_qp()
927 ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue); in internal_create_qp()
930 if (HAS_SQ(my_qp) && !is_user) in internal_create_qp()
931 vfree(my_qp->sq_map.map); in internal_create_qp()
934 if (HAS_SQ(my_qp)) in internal_create_qp()
935 ipz_queue_dtor(my_pd, &my_qp->ipz_squeue); in internal_create_qp()
938 hipz_h_destroy_qp(shca->ipz_hca_handle, my_qp); in internal_create_qp()
942 idr_remove(&ehca_qp_idr, my_qp->token); in internal_create_qp()
946 kmem_cache_free(qp_cache, my_qp); in internal_create_qp()
961 static int internal_destroy_qp(struct ib_device *dev, struct ehca_qp *my_qp,
969 struct ehca_qp *my_qp; in ehca_create_srq() local
990 my_qp = internal_create_qp(pd, &qp_init_attr, srq_init_attr, udata, 1); in ehca_create_srq()
991 if (IS_ERR(my_qp)) in ehca_create_srq()
992 return (struct ib_srq *)my_qp; in ehca_create_srq()
1002 "ehca_qp=%p qp_num=%x ", my_qp, my_qp->real_qp_num); in ehca_create_srq()
1011 my_qp->ipz_qp_handle, in ehca_create_srq()
1012 &my_qp->pf, in ehca_create_srq()
1014 mqpcb, my_qp->galpas.kernel); in ehca_create_srq()
1018 my_qp, my_qp->real_qp_num, hret); in ehca_create_srq()
1025 my_qp->ipz_qp_handle, in ehca_create_srq()
1026 &my_qp->pf, in ehca_create_srq()
1028 mqpcb, my_qp->galpas.kernel); in ehca_create_srq()
1032 my_qp, my_qp->real_qp_num, hret); in ehca_create_srq()
1039 my_qp->ipz_qp_handle, in ehca_create_srq()
1040 &my_qp->pf, in ehca_create_srq()
1042 mqpcb, my_qp->galpas.kernel); in ehca_create_srq()
1046 my_qp, my_qp->real_qp_num, hret); in ehca_create_srq()
1052 return &my_qp->ib_srq; in ehca_create_srq()
1059 internal_destroy_qp(pd->device, my_qp, my_qp->ib_srq.uobject); in ehca_create_srq()
1069 static int prepare_sqe_rts(struct ehca_qp *my_qp, struct ehca_shca *shca, in prepare_sqe_rts() argument
1077 int qp_num = my_qp->ib_qp.qp_num; in prepare_sqe_rts()
1081 my_qp->ipz_qp_handle, &my_qp->pf, in prepare_sqe_rts()
1086 my_qp, qp_num, h_ret); in prepare_sqe_rts()
1096 squeue = &my_qp->ipz_squeue; in prepare_sqe_rts()
1159 static int check_for_left_cqes(struct ehca_qp *my_qp, struct ehca_shca *shca) in check_for_left_cqes() argument
1165 int qp_num = my_qp->ib_qp.qp_num; in check_for_left_cqes()
1168 if (my_qp->ext_type != EQPT_SRQBASE) { in check_for_left_cqes()
1171 my_qp->ipz_qp_handle, &my_qp->pf, in check_for_left_cqes()
1176 my_qp, qp_num, h_ret); in check_for_left_cqes()
1185 spin_lock_irqsave(&my_qp->send_cq->spinlock, flags); in check_for_left_cqes()
1186 ret = calc_left_cqes((u64)send_wqe_p, &my_qp->ipz_squeue, in check_for_left_cqes()
1187 &my_qp->sq_map); in check_for_left_cqes()
1188 spin_unlock_irqrestore(&my_qp->send_cq->spinlock, flags); in check_for_left_cqes()
1193 spin_lock_irqsave(&my_qp->recv_cq->spinlock, flags); in check_for_left_cqes()
1194 ret = calc_left_cqes((u64)recv_wqe_p, &my_qp->ipz_rqueue, in check_for_left_cqes()
1195 &my_qp->rq_map); in check_for_left_cqes()
1196 spin_unlock_irqrestore(&my_qp->recv_cq->spinlock, flags); in check_for_left_cqes()
1200 spin_lock_irqsave(&my_qp->send_cq->spinlock, flags); in check_for_left_cqes()
1201 my_qp->sq_map.left_to_poll = 0; in check_for_left_cqes()
1202 my_qp->sq_map.next_wqe_idx = next_index(my_qp->sq_map.tail, in check_for_left_cqes()
1203 my_qp->sq_map.entries); in check_for_left_cqes()
1204 spin_unlock_irqrestore(&my_qp->send_cq->spinlock, flags); in check_for_left_cqes()
1206 spin_lock_irqsave(&my_qp->recv_cq->spinlock, flags); in check_for_left_cqes()
1207 my_qp->rq_map.left_to_poll = 0; in check_for_left_cqes()
1208 my_qp->rq_map.next_wqe_idx = next_index(my_qp->rq_map.tail, in check_for_left_cqes()
1209 my_qp->rq_map.entries); in check_for_left_cqes()
1210 spin_unlock_irqrestore(&my_qp->recv_cq->spinlock, flags); in check_for_left_cqes()
1214 if ((my_qp->sq_map.left_to_poll == 0) && in check_for_left_cqes()
1215 (my_qp->rq_map.left_to_poll == 0)) { in check_for_left_cqes()
1216 spin_lock_irqsave(&my_qp->send_cq->spinlock, flags); in check_for_left_cqes()
1217 ehca_add_to_err_list(my_qp, 1); in check_for_left_cqes()
1218 spin_unlock_irqrestore(&my_qp->send_cq->spinlock, flags); in check_for_left_cqes()
1220 if (HAS_RQ(my_qp)) { in check_for_left_cqes()
1221 spin_lock_irqsave(&my_qp->recv_cq->spinlock, flags); in check_for_left_cqes()
1222 ehca_add_to_err_list(my_qp, 0); in check_for_left_cqes()
1223 spin_unlock_irqrestore(&my_qp->recv_cq->spinlock, in check_for_left_cqes()
1245 struct ehca_qp *my_qp = container_of(ibqp, struct ehca_qp, ib_qp); in internal_modify_qp() local
1259 "ehca_qp=%p qp_num=%x ", my_qp, ibqp->qp_num); in internal_modify_qp()
1264 my_qp->ipz_qp_handle, in internal_modify_qp()
1265 &my_qp->pf, in internal_modify_qp()
1266 mqpcb, my_qp->galpas.kernel); in internal_modify_qp()
1270 my_qp, ibqp->qp_num, h_ret); in internal_modify_qp()
1283 mqpcb->qp_state, my_qp, ibqp->qp_num); in internal_modify_qp()
1297 .port_num = my_qp->init_attr.port_num, in internal_modify_qp()
1321 attr->cur_qp_state, qp_cur_state, my_qp, ibqp->qp_num); in internal_modify_qp()
1327 my_qp, ibqp->qp_num, qp_cur_state, attr->qp_state, attr_mask); in internal_modify_qp()
1337 qp_cur_state, my_qp, ibqp->qp_num, attr_mask); in internal_modify_qp()
1348 qp_new_state, my_qp, ibqp->qp_num); in internal_modify_qp()
1359 statetrans, my_qp, ibqp->qp_num); in internal_modify_qp()
1369 ibqp->qp_type, my_qp, ibqp->qp_num); in internal_modify_qp()
1375 my_qp, ibqp->qp_num, statetrans); in internal_modify_qp()
1380 if ((my_qp->qp_type == IB_QPT_UD) && in internal_modify_qp()
1381 (my_qp->ext_type != EQPT_LLQP) && in internal_modify_qp()
1389 if ((my_qp->qp_type == IB_QPT_UD || in internal_modify_qp()
1390 my_qp->qp_type == IB_QPT_GSI || in internal_modify_qp()
1391 my_qp->qp_type == IB_QPT_SMI) && in internal_modify_qp()
1397 spin_lock_irqsave(&my_qp->spinlock_s, flags); in internal_modify_qp()
1401 ipz_qeit_get(&my_qp->ipz_squeue); in internal_modify_qp()
1406 ret = prepare_sqe_rts(my_qp, shca, &bad_wqe_cnt); in internal_modify_qp()
1410 my_qp, ibqp->qp_num, ret); in internal_modify_qp()
1439 attr->pkey_index, my_qp, ibqp->qp_num); in internal_modify_qp()
1452 attr->port_num, my_qp, ibqp->qp_num, in internal_modify_qp()
1536 my_qp->mtu_shift = attr->path_mtu + 7; in internal_modify_qp()
1575 attr->alt_port_num, my_qp, ibqp->qp_num, in internal_modify_qp()
1585 attr->pkey_index, my_qp, ibqp->qp_num); in internal_modify_qp()
1674 my_qp->mig_armed = 1; in internal_modify_qp()
1693 my_qp->ipz_qp_handle, in internal_modify_qp()
1694 &my_qp->pf, in internal_modify_qp()
1696 mqpcb, my_qp->galpas.kernel); in internal_modify_qp()
1701 "ehca_qp=%p qp_num=%x", h_ret, my_qp, ibqp->qp_num); in internal_modify_qp()
1705 if ((my_qp->qp_type == IB_QPT_UD || in internal_modify_qp()
1706 my_qp->qp_type == IB_QPT_GSI || in internal_modify_qp()
1707 my_qp->qp_type == IB_QPT_SMI) && in internal_modify_qp()
1711 hipz_update_sqa(my_qp, bad_wqe_cnt-1); in internal_modify_qp()
1723 my_qp->ipz_qp_handle, in internal_modify_qp()
1724 &my_qp->pf, in internal_modify_qp()
1727 my_qp->galpas.kernel); in internal_modify_qp()
1734 h_ret, my_qp, ibqp->qp_num); in internal_modify_qp()
1740 ret = check_for_left_cqes(my_qp, shca); in internal_modify_qp()
1746 ipz_qeit_reset(&my_qp->ipz_rqueue); in internal_modify_qp()
1747 ipz_qeit_reset(&my_qp->ipz_squeue); in internal_modify_qp()
1750 del_from_err_list(my_qp->send_cq, &my_qp->sq_err_node); in internal_modify_qp()
1752 if (HAS_RQ(my_qp)) in internal_modify_qp()
1753 del_from_err_list(my_qp->recv_cq, in internal_modify_qp()
1754 &my_qp->rq_err_node); in internal_modify_qp()
1757 reset_queue_map(&my_qp->sq_map); in internal_modify_qp()
1759 if (HAS_RQ(my_qp) && !is_user) in internal_modify_qp()
1760 reset_queue_map(&my_qp->rq_map); in internal_modify_qp()
1764 my_qp->qkey = attr->qkey; in internal_modify_qp()
1768 spin_unlock_irqrestore(&my_qp->spinlock_s, flags); in internal_modify_qp()
1769 my_qp->sqerr_purgeflag = 1; in internal_modify_qp()
1785 struct ehca_qp *my_qp = container_of(ibqp, struct ehca_qp, ib_qp); in ehca_modify_qp() local
1803 int port = my_qp->init_attr.port_num; in ehca_modify_qp()
1808 if (my_qp->mod_qp_parm) { in ehca_modify_qp()
1810 if (my_qp->mod_qp_parm_idx >= EHCA_MOD_QP_PARM_MAX) { in ehca_modify_qp()
1814 my_qp->init_attr.port_num, in ehca_modify_qp()
1820 p = &my_qp->mod_qp_parm[my_qp->mod_qp_parm_idx]; in ehca_modify_qp()
1823 my_qp->mod_qp_parm_idx++; in ehca_modify_qp()
1826 attr->qp_state, my_qp->init_attr.port_num, in ehca_modify_qp()
1838 my_qp->state = attr->qp_state; in ehca_modify_qp()
1891 struct ehca_qp *my_qp = container_of(qp, struct ehca_qp, ib_qp); in ehca_query_qp() local
1902 my_qp, qp->qp_num, qp_attr_mask); in ehca_query_qp()
1909 "ehca_qp=%p qp_num=%x", my_qp, qp->qp_num); in ehca_query_qp()
1914 my_qp->ipz_qp_handle, in ehca_query_qp()
1915 &my_qp->pf, in ehca_query_qp()
1916 qpcb, my_qp->galpas.kernel); in ehca_query_qp()
1922 my_qp, qp->qp_num, h_ret); in ehca_query_qp()
1933 qpcb->qp_state, my_qp, qp->qp_num); in ehca_query_qp()
1949 if (my_qp->qp_type == IB_QPT_UD) { in ehca_query_qp()
1961 qp_attr->cap.max_inline_data = my_qp->sq_max_inline_data_size; in ehca_query_qp()
2021 *qp_init_attr = my_qp->init_attr; in ehca_query_qp()
2035 struct ehca_qp *my_qp = in ehca_modify_srq() local
2047 "ehca_qp=%p qp_num=%x ", my_qp, my_qp->real_qp_num); in ehca_modify_srq()
2071 ehca_dmp(mqpcb, 4*70, "qp_num=%x", my_qp->real_qp_num); in ehca_modify_srq()
2073 h_ret = hipz_h_modify_qp(shca->ipz_hca_handle, my_qp->ipz_qp_handle, in ehca_modify_srq()
2075 my_qp->galpas.kernel); in ehca_modify_srq()
2081 h_ret, my_qp, my_qp->real_qp_num); in ehca_modify_srq()
2092 struct ehca_qp *my_qp = container_of(srq, struct ehca_qp, ib_srq); in ehca_query_srq() local
2103 "ehca_qp=%p qp_num=%x", my_qp, my_qp->real_qp_num); in ehca_query_srq()
2107 h_ret = hipz_h_query_qp(adapter_handle, my_qp->ipz_qp_handle, in ehca_query_srq()
2108 NULL, qpcb, my_qp->galpas.kernel); in ehca_query_srq()
2114 my_qp, my_qp->real_qp_num, h_ret); in ehca_query_srq()
2123 ehca_dmp(qpcb, 4*70, "qp_num=%x", my_qp->real_qp_num); in ehca_query_srq()
2131 static int internal_destroy_qp(struct ib_device *dev, struct ehca_qp *my_qp, in internal_destroy_qp() argument
2135 struct ehca_pd *my_pd = container_of(my_qp->ib_qp.pd, struct ehca_pd, in internal_destroy_qp()
2137 struct ehca_sport *sport = &shca->sport[my_qp->init_attr.port_num - 1]; in internal_destroy_qp()
2138 u32 qp_num = my_qp->real_qp_num; in internal_destroy_qp()
2148 if (my_qp->mm_count_galpa || in internal_destroy_qp()
2149 my_qp->mm_count_rqueue || my_qp->mm_count_squeue) { in internal_destroy_qp()
2156 if (my_qp->send_cq) { in internal_destroy_qp()
2157 ret = ehca_cq_unassign_qp(my_qp->send_cq, qp_num); in internal_destroy_qp()
2161 qp_num, my_qp->send_cq->cq_number); in internal_destroy_qp()
2167 idr_remove(&ehca_qp_idr, my_qp->token); in internal_destroy_qp()
2174 if (HAS_RQ(my_qp) && !IS_SRQ(my_qp) && !is_user) in internal_destroy_qp()
2175 del_from_err_list(my_qp->recv_cq, &my_qp->rq_err_node); in internal_destroy_qp()
2177 if (HAS_SQ(my_qp) && !is_user) in internal_destroy_qp()
2178 del_from_err_list(my_qp->send_cq, &my_qp->sq_err_node); in internal_destroy_qp()
2181 wait_event(my_qp->wait_completion, !atomic_read(&my_qp->nr_events)); in internal_destroy_qp()
2183 h_ret = hipz_h_destroy_qp(shca->ipz_hca_handle, my_qp); in internal_destroy_qp()
2186 "ehca_qp=%p qp_num=%x", h_ret, my_qp, qp_num); in internal_destroy_qp()
2190 port_num = my_qp->init_attr.port_num; in internal_destroy_qp()
2191 qp_type = my_qp->init_attr.qp_type; in internal_destroy_qp()
2195 kfree(my_qp->mod_qp_parm); in internal_destroy_qp()
2196 my_qp->mod_qp_parm = NULL; in internal_destroy_qp()
2213 if (HAS_RQ(my_qp)) { in internal_destroy_qp()
2214 ipz_queue_dtor(my_pd, &my_qp->ipz_rqueue); in internal_destroy_qp()
2216 vfree(my_qp->rq_map.map); in internal_destroy_qp()
2218 if (HAS_SQ(my_qp)) { in internal_destroy_qp()
2219 ipz_queue_dtor(my_pd, &my_qp->ipz_squeue); in internal_destroy_qp()
2221 vfree(my_qp->sq_map.map); in internal_destroy_qp()
2223 kmem_cache_free(qp_cache, my_qp); in internal_destroy_qp()