Searched refs:qp_grp (Results 1 - 7 of 7) sorted by relevance

/linux-4.4.14/drivers/infiniband/hw/usnic/
H A Dusnic_ib_qp_grp.c79 struct usnic_ib_qp_grp *qp_grp = obj; usnic_ib_qp_grp_dump_rows() local
82 default_flow = list_first_entry(&qp_grp->flows_lst, usnic_ib_qp_grp_dump_rows()
85 qp_grp->ibqp.qp_num, usnic_ib_qp_grp_dump_rows()
87 qp_grp->state), usnic_ib_qp_grp_dump_rows()
88 qp_grp->owner_pid, usnic_ib_qp_grp_dump_rows()
89 usnic_vnic_get_index(qp_grp->vf->vnic), usnic_ib_qp_grp_dump_rows()
97 get_qp_res_chunk(struct usnic_ib_qp_grp *qp_grp) get_qp_res_chunk() argument
99 lockdep_assert_held(&qp_grp->lock); get_qp_res_chunk()
104 return usnic_ib_qp_grp_get_chunk(qp_grp, USNIC_VNIC_RES_TYPE_RQ); get_qp_res_chunk()
107 static int enable_qp_grp(struct usnic_ib_qp_grp *qp_grp) enable_qp_grp() argument
115 lockdep_assert_held(&qp_grp->lock); enable_qp_grp()
117 vnic_idx = usnic_vnic_get_index(qp_grp->vf->vnic); enable_qp_grp()
119 res_chunk = get_qp_res_chunk(qp_grp); enable_qp_grp()
128 status = usnic_fwd_enable_qp(qp_grp->ufdev, vnic_idx, enable_qp_grp()
132 res->vnic_idx, qp_grp->ufdev->name, enable_qp_grp()
143 usnic_fwd_disable_qp(qp_grp->ufdev, vnic_idx, enable_qp_grp()
150 static int disable_qp_grp(struct usnic_ib_qp_grp *qp_grp) disable_qp_grp() argument
157 lockdep_assert_held(&qp_grp->lock); disable_qp_grp()
158 vnic_idx = usnic_vnic_get_index(qp_grp->vf->vnic); disable_qp_grp()
160 res_chunk = get_qp_res_chunk(qp_grp); disable_qp_grp()
169 status = usnic_fwd_disable_qp(qp_grp->ufdev, vnic_idx, disable_qp_grp()
174 qp_grp->ufdev->name, disable_qp_grp()
183 static int init_filter_action(struct usnic_ib_qp_grp *qp_grp, init_filter_action() argument
188 res_chunk = usnic_ib_qp_grp_get_chunk(qp_grp, USNIC_VNIC_RES_TYPE_RQ); init_filter_action()
196 uaction->vnic_idx = usnic_vnic_get_index(qp_grp->vf->vnic); init_filter_action()
204 create_roce_custom_flow(struct usnic_ib_qp_grp *qp_grp, create_roce_custom_flow() argument
225 err = init_filter_action(qp_grp, &uaction); create_roce_custom_flow()
229 flow = usnic_fwd_alloc_flow(qp_grp->ufdev, &filter, &uaction); create_roce_custom_flow()
246 qp_flow->qp_grp = qp_grp; create_roce_custom_flow()
265 create_udp_flow(struct usnic_ib_qp_grp *qp_grp, create_udp_flow() argument
300 err = init_filter_action(qp_grp, &uaction); create_udp_flow()
304 flow = usnic_fwd_alloc_flow(qp_grp->ufdev, &filter, &uaction); create_udp_flow()
321 qp_flow->qp_grp = qp_grp; create_udp_flow()
339 create_and_add_flow(struct usnic_ib_qp_grp *qp_grp, create_and_add_flow() argument
348 qp_flow = create_roce_custom_flow(qp_grp, trans_spec); create_and_add_flow()
351 qp_flow = create_udp_flow(qp_grp, trans_spec); create_and_add_flow()
360 list_add_tail(&qp_flow->link, &qp_grp->flows_lst); create_and_add_flow()
387 static void release_and_remove_all_flows(struct usnic_ib_qp_grp *qp_grp) release_and_remove_all_flows() argument
390 list_for_each_entry_safe(qp_flow, tmp, &qp_grp->flows_lst, link) release_and_remove_all_flows()
394 int usnic_ib_qp_grp_modify(struct usnic_ib_qp_grp *qp_grp, usnic_ib_qp_grp_modify() argument
405 old_state = qp_grp->state; usnic_ib_qp_grp_modify()
406 vnic_idx = usnic_vnic_get_index(qp_grp->vf->vnic); usnic_ib_qp_grp_modify()
409 spin_lock(&qp_grp->lock); usnic_ib_qp_grp_modify()
417 release_and_remove_all_flows(qp_grp); usnic_ib_qp_grp_modify()
423 status = disable_qp_grp(qp_grp); usnic_ib_qp_grp_modify()
424 release_and_remove_all_flows(qp_grp); usnic_ib_qp_grp_modify()
434 qp_flow = create_and_add_flow(qp_grp, usnic_ib_qp_grp_modify()
449 qp_flow = create_and_add_flow(qp_grp, usnic_ib_qp_grp_modify()
464 status = disable_qp_grp(qp_grp); usnic_ib_qp_grp_modify()
467 status = disable_qp_grp(qp_grp); usnic_ib_qp_grp_modify()
476 status = enable_qp_grp(qp_grp); usnic_ib_qp_grp_modify()
492 ib_event.device = &qp_grp->vf->pf->ib_dev; usnic_ib_qp_grp_modify()
493 ib_event.element.qp = &qp_grp->ibqp; usnic_ib_qp_grp_modify()
498 qp_grp->ibqp.event_handler(&ib_event, usnic_ib_qp_grp_modify()
499 qp_grp->ibqp.qp_context); usnic_ib_qp_grp_modify()
502 release_and_remove_all_flows(qp_grp); usnic_ib_qp_grp_modify()
503 qp_grp->ibqp.event_handler(&ib_event, usnic_ib_qp_grp_modify()
504 qp_grp->ibqp.qp_context); usnic_ib_qp_grp_modify()
508 status = disable_qp_grp(qp_grp); usnic_ib_qp_grp_modify()
509 release_and_remove_all_flows(qp_grp); usnic_ib_qp_grp_modify()
510 qp_grp->ibqp.event_handler(&ib_event, usnic_ib_qp_grp_modify()
511 qp_grp->ibqp.qp_context); usnic_ib_qp_grp_modify()
520 spin_unlock(&qp_grp->lock); usnic_ib_qp_grp_modify()
523 qp_grp->state = new_state; usnic_ib_qp_grp_modify()
525 qp_grp->grp_id, usnic_ib_qp_grp_modify()
530 qp_grp->grp_id, usnic_ib_qp_grp_modify()
594 struct usnic_ib_qp_grp *qp_grp) qp_grp_and_vf_bind()
614 qp_grp->vf = vf; qp_grp_and_vf_bind()
619 static void qp_grp_and_vf_unbind(struct usnic_ib_qp_grp *qp_grp) qp_grp_and_vf_unbind() argument
624 lockdep_assert_held(&qp_grp->vf->lock); qp_grp_and_vf_unbind()
626 pd = qp_grp->vf->pd; qp_grp_and_vf_unbind()
627 pdev = usnic_vnic_get_pdev(qp_grp->vf->vnic); qp_grp_and_vf_unbind()
628 if (--qp_grp->vf->qp_grp_ref_cnt == 0) { qp_grp_and_vf_unbind()
629 qp_grp->vf->pd = NULL; qp_grp_and_vf_unbind()
632 qp_grp->vf = NULL; qp_grp_and_vf_unbind()
680 struct usnic_ib_qp_grp *qp_grp; usnic_ib_qp_grp_create() local
696 qp_grp = kzalloc(sizeof(*qp_grp), GFP_ATOMIC); usnic_ib_qp_grp_create()
697 if (!qp_grp) { usnic_ib_qp_grp_create()
698 usnic_err("Unable to alloc qp_grp - Out of memory\n"); usnic_ib_qp_grp_create()
702 qp_grp->res_chunk_list = alloc_res_chunk_list(vf->vnic, res_spec, usnic_ib_qp_grp_create()
703 qp_grp); usnic_ib_qp_grp_create()
704 if (IS_ERR_OR_NULL(qp_grp->res_chunk_list)) { usnic_ib_qp_grp_create()
705 err = qp_grp->res_chunk_list ? usnic_ib_qp_grp_create()
706 PTR_ERR(qp_grp->res_chunk_list) : -ENOMEM; usnic_ib_qp_grp_create()
708 qp_grp->grp_id, err); usnic_ib_qp_grp_create()
712 err = qp_grp_and_vf_bind(vf, pd, qp_grp); usnic_ib_qp_grp_create()
716 INIT_LIST_HEAD(&qp_grp->flows_lst); usnic_ib_qp_grp_create()
717 spin_lock_init(&qp_grp->lock); usnic_ib_qp_grp_create()
718 qp_grp->ufdev = ufdev; usnic_ib_qp_grp_create()
719 qp_grp->state = IB_QPS_RESET; usnic_ib_qp_grp_create()
720 qp_grp->owner_pid = current->pid; usnic_ib_qp_grp_create()
722 qp_flow = create_and_add_flow(qp_grp, transport_spec); usnic_ib_qp_grp_create()
730 err = qp_grp_id_from_flow(qp_flow, &qp_grp->grp_id); usnic_ib_qp_grp_create()
733 qp_grp->ibqp.qp_num = qp_grp->grp_id; usnic_ib_qp_grp_create()
735 usnic_ib_sysfs_qpn_add(qp_grp); usnic_ib_qp_grp_create()
737 return qp_grp; usnic_ib_qp_grp_create()
742 qp_grp_and_vf_unbind(qp_grp); usnic_ib_qp_grp_create()
744 free_qp_grp_res(qp_grp->res_chunk_list); usnic_ib_qp_grp_create()
746 kfree(qp_grp); usnic_ib_qp_grp_create()
751 void usnic_ib_qp_grp_destroy(struct usnic_ib_qp_grp *qp_grp) usnic_ib_qp_grp_destroy() argument
754 WARN_ON(qp_grp->state != IB_QPS_RESET); usnic_ib_qp_grp_destroy()
755 lockdep_assert_held(&qp_grp->vf->lock); usnic_ib_qp_grp_destroy()
757 release_and_remove_all_flows(qp_grp); usnic_ib_qp_grp_destroy()
758 usnic_ib_sysfs_qpn_remove(qp_grp); usnic_ib_qp_grp_destroy()
759 qp_grp_and_vf_unbind(qp_grp); usnic_ib_qp_grp_destroy()
760 free_qp_grp_res(qp_grp->res_chunk_list); usnic_ib_qp_grp_destroy()
761 kfree(qp_grp); usnic_ib_qp_grp_destroy()
765 usnic_ib_qp_grp_get_chunk(struct usnic_ib_qp_grp *qp_grp, usnic_ib_qp_grp_get_chunk() argument
770 for (i = 0; qp_grp->res_chunk_list[i]; i++) { usnic_ib_qp_grp_get_chunk()
771 if (qp_grp->res_chunk_list[i]->type == res_type) usnic_ib_qp_grp_get_chunk()
772 return qp_grp->res_chunk_list[i]; usnic_ib_qp_grp_get_chunk()
592 qp_grp_and_vf_bind(struct usnic_ib_vf *vf, struct usnic_ib_pd *pd, struct usnic_ib_qp_grp *qp_grp) qp_grp_and_vf_bind() argument
H A Dusnic_ib_verbs.c57 static int usnic_ib_fill_create_qp_resp(struct usnic_ib_qp_grp *qp_grp, usnic_ib_fill_create_qp_resp() argument
70 us_ibdev = qp_grp->vf->pf; usnic_ib_fill_create_qp_resp()
71 pdev = usnic_vnic_get_pdev(qp_grp->vf->vnic); usnic_ib_fill_create_qp_resp()
73 usnic_err("Failed to get pdev of qp_grp %d\n", usnic_ib_fill_create_qp_resp()
74 qp_grp->grp_id); usnic_ib_fill_create_qp_resp()
78 bar = usnic_vnic_get_bar(qp_grp->vf->vnic, 0); usnic_ib_fill_create_qp_resp()
80 usnic_err("Failed to get bar0 of qp_grp %d vf %s", usnic_ib_fill_create_qp_resp()
81 qp_grp->grp_id, pci_name(pdev)); usnic_ib_fill_create_qp_resp()
85 resp.vfid = usnic_vnic_get_index(qp_grp->vf->vnic); usnic_ib_fill_create_qp_resp()
89 chunk = usnic_ib_qp_grp_get_chunk(qp_grp, USNIC_VNIC_RES_TYPE_RQ); usnic_ib_fill_create_qp_resp()
91 usnic_err("Failed to get chunk %s for qp_grp %d with err %ld\n", usnic_ib_fill_create_qp_resp()
93 qp_grp->grp_id, usnic_ib_fill_create_qp_resp()
103 chunk = usnic_ib_qp_grp_get_chunk(qp_grp, USNIC_VNIC_RES_TYPE_WQ); usnic_ib_fill_create_qp_resp()
105 usnic_err("Failed to get chunk %s for qp_grp %d with err %ld\n", usnic_ib_fill_create_qp_resp()
107 qp_grp->grp_id, usnic_ib_fill_create_qp_resp()
117 chunk = usnic_ib_qp_grp_get_chunk(qp_grp, USNIC_VNIC_RES_TYPE_CQ); usnic_ib_fill_create_qp_resp()
119 usnic_err("Failed to get chunk %s for qp_grp %d with err %ld\n", usnic_ib_fill_create_qp_resp()
121 qp_grp->grp_id, usnic_ib_fill_create_qp_resp()
131 default_flow = list_first_entry(&qp_grp->flows_lst, usnic_ib_fill_create_qp_resp()
152 struct usnic_ib_qp_grp *qp_grp; find_free_vf_and_create_qp_grp() local
205 qp_grp = usnic_ib_qp_grp_create(us_ibdev->ufdev, vf, pd, res_spec, find_free_vf_and_create_qp_grp()
208 if (IS_ERR_OR_NULL(qp_grp)) { find_free_vf_and_create_qp_grp()
209 usnic_err("Failed to allocate qp_grp\n"); find_free_vf_and_create_qp_grp()
210 return ERR_PTR(qp_grp ? PTR_ERR(qp_grp) : -ENOMEM); find_free_vf_and_create_qp_grp()
213 return qp_grp; find_free_vf_and_create_qp_grp()
216 static void qp_grp_destroy(struct usnic_ib_qp_grp *qp_grp) qp_grp_destroy() argument
218 struct usnic_ib_vf *vf = qp_grp->vf; qp_grp_destroy()
220 WARN_ON(qp_grp->state != IB_QPS_RESET); qp_grp_destroy()
223 usnic_ib_qp_grp_destroy(qp_grp); qp_grp_destroy()
374 struct usnic_ib_qp_grp *qp_grp; usnic_ib_query_qp() local
383 qp_grp = to_uqp_grp(qp); usnic_ib_query_qp()
384 vf = qp_grp->vf; usnic_ib_query_qp()
387 qp_attr->qp_state = qp_grp->state; usnic_ib_query_qp()
388 qp_attr->cur_qp_state = qp_grp->state; usnic_ib_query_qp()
390 switch (qp_grp->ibqp.qp_type) { usnic_ib_query_qp()
395 usnic_err("Unexpected qp_type %d\n", qp_grp->ibqp.qp_type); usnic_ib_query_qp()
476 struct usnic_ib_qp_grp *qp_grp; usnic_ib_create_qp() local
516 qp_grp = find_free_vf_and_create_qp_grp(us_ibdev, to_upd(pd), usnic_ib_create_qp()
519 if (IS_ERR_OR_NULL(qp_grp)) { usnic_ib_create_qp()
520 err = qp_grp ? PTR_ERR(qp_grp) : -ENOMEM; usnic_ib_create_qp()
524 err = usnic_ib_fill_create_qp_resp(qp_grp, udata); usnic_ib_create_qp()
530 qp_grp->ctx = ucontext; usnic_ib_create_qp()
531 list_add_tail(&qp_grp->link, &ucontext->qp_grp_list); usnic_ib_create_qp()
532 usnic_ib_log_vf(qp_grp->vf); usnic_ib_create_qp()
534 return &qp_grp->ibqp; usnic_ib_create_qp()
537 qp_grp_destroy(qp_grp); usnic_ib_create_qp()
545 struct usnic_ib_qp_grp *qp_grp; usnic_ib_destroy_qp() local
550 qp_grp = to_uqp_grp(qp); usnic_ib_destroy_qp()
551 vf = qp_grp->vf; usnic_ib_destroy_qp()
553 if (usnic_ib_qp_grp_modify(qp_grp, IB_QPS_RESET, NULL)) { usnic_ib_destroy_qp()
555 qp_grp->grp_id); usnic_ib_destroy_qp()
558 list_del(&qp_grp->link); usnic_ib_destroy_qp()
559 qp_grp_destroy(qp_grp); usnic_ib_destroy_qp()
568 struct usnic_ib_qp_grp *qp_grp; usnic_ib_modify_qp() local
572 qp_grp = to_uqp_grp(ibqp); usnic_ib_modify_qp()
575 mutex_lock(&qp_grp->vf->pf->usdev_lock); usnic_ib_modify_qp()
577 status = usnic_ib_qp_grp_modify(qp_grp, IB_QPS_INIT, NULL); usnic_ib_modify_qp()
579 status = usnic_ib_qp_grp_modify(qp_grp, IB_QPS_RTR, NULL); usnic_ib_modify_qp()
581 status = usnic_ib_qp_grp_modify(qp_grp, IB_QPS_RTS, NULL); usnic_ib_modify_qp()
588 mutex_unlock(&qp_grp->vf->pf->usdev_lock); usnic_ib_modify_qp()
695 struct usnic_ib_qp_grp *qp_grp; usnic_ib_mmap() local
712 list_for_each_entry(qp_grp, &uctx->qp_grp_list, link) { usnic_ib_mmap()
713 vf = qp_grp->vf; usnic_ib_mmap()
H A Dusnic_ib_sysfs.c224 struct usnic_ib_qp_grp *qp_grp; usnic_ib_qpn_attr_show() local
227 qp_grp = container_of(kobj, struct usnic_ib_qp_grp, kobj); usnic_ib_qpn_attr_show()
230 return qpn_attr->show(qp_grp, buf); usnic_ib_qpn_attr_show()
240 static ssize_t context_show(struct usnic_ib_qp_grp *qp_grp, char *buf) context_show() argument
242 return scnprintf(buf, PAGE_SIZE, "0x%p\n", qp_grp->ctx); context_show()
245 static ssize_t summary_show(struct usnic_ib_qp_grp *qp_grp, char *buf) summary_show() argument
258 qp_grp->ibqp.qp_num, summary_show()
259 usnic_ib_qp_grp_state_to_string(qp_grp->state), summary_show()
260 qp_grp->owner_pid, summary_show()
261 usnic_vnic_get_index(qp_grp->vf->vnic)); summary_show()
264 for (i = 0; qp_grp->res_chunk_list[i]; i++) { summary_show()
265 res_chunk = qp_grp->res_chunk_list[i]; summary_show()
332 void usnic_ib_sysfs_qpn_add(struct usnic_ib_qp_grp *qp_grp) usnic_ib_sysfs_qpn_add() argument
337 us_ibdev = qp_grp->vf->pf; usnic_ib_sysfs_qpn_add()
339 err = kobject_init_and_add(&qp_grp->kobj, &usnic_ib_qpn_type, usnic_ib_sysfs_qpn_add()
341 "%d", qp_grp->grp_id); usnic_ib_sysfs_qpn_add()
348 void usnic_ib_sysfs_qpn_remove(struct usnic_ib_qp_grp *qp_grp) usnic_ib_sysfs_qpn_remove() argument
352 us_ibdev = qp_grp->vf->pf; usnic_ib_sysfs_qpn_remove()
354 kobject_put(&qp_grp->kobj); usnic_ib_sysfs_qpn_remove()
H A Dusnic_ib_qp_grp.h79 struct usnic_ib_qp_grp *qp_grp; member in struct:usnic_ib_qp_grp_flow
120 void usnic_ib_qp_grp_destroy(struct usnic_ib_qp_grp *qp_grp);
121 int usnic_ib_qp_grp_modify(struct usnic_ib_qp_grp *qp_grp,
125 *usnic_ib_qp_grp_get_chunk(struct usnic_ib_qp_grp *qp_grp,
H A Dusnic_ib_sysfs.h41 void usnic_ib_sysfs_qpn_add(struct usnic_ib_qp_grp *qp_grp);
42 void usnic_ib_sysfs_qpn_remove(struct usnic_ib_qp_grp *qp_grp);
H A Dusnic_debugfs.c85 spin_lock(&qp_flow->qp_grp->lock); flowinfo_read()
88 qp_flow->qp_grp->grp_id, flowinfo_read()
102 spin_unlock(&qp_flow->qp_grp->lock); flowinfo_read()
H A Dusnic_ib_main.c119 struct usnic_ib_qp_grp *qp_grp; usnic_ib_qp_grp_modify_active_to_err() local
126 list_for_each_entry(qp_grp, &ctx->qp_grp_list, link) { usnic_ib_qp_grp_modify_active_to_err()
127 cur_state = qp_grp->state; usnic_ib_qp_grp_modify_active_to_err()
131 status = usnic_ib_qp_grp_modify(qp_grp, usnic_ib_qp_grp_modify_active_to_err()
136 qp_grp->grp_id, usnic_ib_qp_grp_modify_active_to_err()

Completed in 204 milliseconds