Lines Matching defs:con
179 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
180 struct rtrs_path *s = con->c.path;
197 struct rtrs_path *s = id->con->c.path;
268 flags = (atomic_inc_return(&id->con->c.wr_cnt) % s->signal_interval) ?
320 err = ib_post_send(id->con->c.qp, &id->tx_wr.wr, NULL);
332 * @con: the connection to send back result
338 static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id,
341 struct rtrs_path *s = con->c.path;
396 flags = (atomic_inc_return(&con->c.wr_cnt) % s->signal_interval) ?
438 err = ib_post_send(id->con->c.qp, wr, NULL);
483 struct rtrs_srv_con *con;
490 con = id->con;
491 s = con->c.path;
508 if (atomic_sub_return(1, &con->c.sq_wr_avail) < 0) {
511 con->c.cid);
512 atomic_add(1, &con->c.sq_wr_avail);
513 spin_lock(&con->rsp_wr_wait_lock);
514 list_add_tail(&id->wait_list, &con->rsp_wr_wait_list);
515 spin_unlock(&con->rsp_wr_wait_lock);
520 err = send_io_resp_imm(con, id, status);
699 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
700 struct rtrs_path *s = con->c.path;
786 static int process_info_req(struct rtrs_srv_con *con,
789 struct rtrs_path *s = con->c.path;
886 err = rtrs_iu_post_send(&con->c, tx_iu, tx_sz, reg_wr);
900 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
901 struct rtrs_path *s = con->c.path;
907 WARN_ON(con->c.cid);
930 err = process_info_req(con, msg);
942 static int post_recv_info_req(struct rtrs_srv_con *con)
944 struct rtrs_path *s = con->c.path;
955 err = rtrs_iu_post_recv(&con->c, rx_iu);
965 static int post_recv_io(struct rtrs_srv_con *con, size_t q_size)
970 err = rtrs_post_recv_empty(&con->c, &io_comp_cqe);
991 err = post_recv_io(to_srv_con(srv_path->s.con[cid]), q_size);
1001 static void process_read(struct rtrs_srv_con *con,
1005 struct rtrs_path *s = con->c.path;
1029 id->con = con;
1049 ret = send_io_resp_imm(con, id, ret);
1059 static void process_write(struct rtrs_srv_con *con,
1063 struct rtrs_path *s = con->c.path;
1082 id->con = con;
1101 ret = send_io_resp_imm(con, id, ret);
1111 static void process_io_req(struct rtrs_srv_con *con, void *msg,
1114 struct rtrs_path *s = con->c.path;
1127 process_write(con, msg, id, off);
1130 process_read(con, msg, id, off);
1149 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
1150 struct rtrs_path *s = con->c.path;
1164 process_io_req(con, data, msg_id, off);
1167 static int rtrs_srv_inv_rkey(struct rtrs_srv_con *con,
1178 return ib_post_send(con->c.qp, &wr, NULL);
1181 static void rtrs_rdma_process_wr_wait_list(struct rtrs_srv_con *con)
1183 spin_lock(&con->rsp_wr_wait_lock);
1184 while (!list_empty(&con->rsp_wr_wait_list)) {
1188 id = list_entry(con->rsp_wr_wait_list.next,
1192 spin_unlock(&con->rsp_wr_wait_lock);
1194 spin_lock(&con->rsp_wr_wait_lock);
1197 list_add(&id->wait_list, &con->rsp_wr_wait_list);
1201 spin_unlock(&con->rsp_wr_wait_lock);
1206 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context);
1207 struct rtrs_path *s = con->c.path;
1232 err = rtrs_post_recv_empty(&con->c, &io_comp_cqe);
1257 err = rtrs_srv_inv_rkey(con, mr);
1266 process_io_req(con, data, msg_id, off);
1269 WARN_ON(con->c.cid);
1272 WARN_ON(con->c.cid);
1284 atomic_add(s->signal_interval, &con->c.sq_wr_avail);
1286 if (!list_empty_careful(&con->rsp_wr_wait_list))
1287 rtrs_rdma_process_wr_wait_list(con);
1530 struct rtrs_srv_con *con;
1538 if (!srv_path->s.con[i])
1540 con = to_srv_con(srv_path->s.con[i]);
1541 rdma_disconnect(con->c.cm_id);
1542 ib_drain_qp(con->c.qp);
1563 if (!srv_path->s.con[i])
1565 con = to_srv_con(srv_path->s.con[i]);
1566 rtrs_cq_qp_destroy(&con->c);
1567 rdma_destroy_id(con->c.cm_id);
1568 kfree(con);
1578 kfree(srv_path->s.con);
1652 struct rtrs_srv_con *con;
1657 con = kzalloc(sizeof(*con), GFP_KERNEL);
1658 if (!con) {
1663 spin_lock_init(&con->rsp_wr_wait_lock);
1664 INIT_LIST_HEAD(&con->rsp_wr_wait_list);
1665 con->c.cm_id = cm_id;
1666 con->c.path = &srv_path->s;
1667 con->c.cid = cid;
1668 atomic_set(&con->c.wr_cnt, 1);
1671 if (con->c.cid == 0) {
1695 atomic_set(&con->c.sq_wr_avail, max_send_wr);
1699 err = rtrs_cq_qp_create(&srv_path->s, &con->c, 1, cq_vector, cq_num,
1706 if (con->c.cid == 0) {
1707 err = post_recv_info_req(con);
1711 WARN_ON(srv_path->s.con[cid]);
1712 srv_path->s.con[cid] = &con->c;
1718 cm_id->context = &con->c;
1723 rtrs_cq_qp_destroy(&con->c);
1725 kfree(con);
1771 srv_path->s.con = kcalloc(con_num, sizeof(*srv_path->s.con),
1773 if (!srv_path->s.con)
1818 kfree(srv_path->s.con);
1899 if (s->con[cid]) {