Lines Matching defs:gsi

46 /* Call with gsi->lock locked */
49 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
54 for (index = gsi->outstanding_ci; index != gsi->outstanding_pi;
56 wr = &gsi->outstanding_wrs[index % gsi->cap.max_send_wr];
65 gsi->outstanding_ci = index;
70 struct mlx5_ib_gsi_qp *gsi = cq->cq_context;
73 struct mlx5_ib_qp *mqp = container_of(gsi, struct mlx5_ib_qp, gsi);
77 spin_lock_irqsave(&gsi->lock, flags);
85 spin_unlock_irqrestore(&gsi->lock, flags);
92 struct mlx5_ib_gsi_qp *gsi;
106 gsi = &mqp->gsi;
107 gsi->tx_qps = kcalloc(num_qps, sizeof(*gsi->tx_qps), GFP_KERNEL);
108 if (!gsi->tx_qps)
111 gsi->outstanding_wrs =
112 kcalloc(attr->cap.max_send_wr, sizeof(*gsi->outstanding_wrs),
114 if (!gsi->outstanding_wrs) {
119 if (dev->devr.ports[port_num - 1].gsi) {
125 gsi->num_qps = num_qps;
126 spin_lock_init(&gsi->lock);
128 gsi->cap = attr->cap;
129 gsi->port_num = port_num;
131 gsi->cq = ib_alloc_cq(pd->device, gsi, attr->cap.max_send_wr, 0,
133 if (IS_ERR(gsi->cq)) {
135 PTR_ERR(gsi->cq));
136 ret = PTR_ERR(gsi->cq);
141 hw_init_attr.send_cq = gsi->cq;
148 gsi->rx_qp = ib_create_qp(pd, &hw_init_attr);
149 if (IS_ERR(gsi->rx_qp)) {
151 PTR_ERR(gsi->rx_qp));
152 ret = PTR_ERR(gsi->rx_qp);
156 dev->devr.ports[attr->port_num - 1].gsi = gsi;
160 ib_free_cq(gsi->cq);
162 kfree(gsi->outstanding_wrs);
164 kfree(gsi->tx_qps);
171 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
172 const int port_num = gsi->port_num;
176 ret = ib_destroy_qp(gsi->rx_qp);
182 dev->devr.ports[port_num - 1].gsi = NULL;
183 gsi->rx_qp = NULL;
185 for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index) {
186 if (!gsi->tx_qps[qp_index])
188 WARN_ON_ONCE(ib_destroy_qp(gsi->tx_qps[qp_index]));
189 gsi->tx_qps[qp_index] = NULL;
192 ib_free_cq(gsi->cq);
194 kfree(gsi->outstanding_wrs);
195 kfree(gsi->tx_qps);
199 static struct ib_qp *create_gsi_ud_qp(struct mlx5_ib_gsi_qp *gsi)
201 struct ib_pd *pd = gsi->rx_qp->pd;
203 .event_handler = gsi->rx_qp->event_handler,
204 .qp_context = gsi->rx_qp->qp_context,
205 .send_cq = gsi->cq,
206 .recv_cq = gsi->rx_qp->recv_cq,
208 .max_send_wr = gsi->cap.max_send_wr,
209 .max_send_sge = gsi->cap.max_send_sge,
210 .max_inline_data = gsi->cap.max_inline_data,
219 static int modify_to_rts(struct mlx5_ib_gsi_qp *gsi, struct ib_qp *qp,
231 attr.port_num = gsi->port_num;
259 static void setup_qp(struct mlx5_ib_gsi_qp *gsi, u16 qp_index)
261 struct ib_device *device = gsi->rx_qp->device;
273 ret = ib_query_pkey(device, gsi->port_num, pkey_index, &pkey);
276 gsi->port_num, qp_index);
282 gsi->port_num, qp_index);
286 spin_lock_irqsave(&gsi->lock, flags);
287 qp = gsi->tx_qps[qp_index];
288 spin_unlock_irqrestore(&gsi->lock, flags);
291 gsi->port_num, qp_index);
295 qp = create_gsi_ud_qp(gsi);
305 ret = modify_to_rts(gsi, qp, pkey_index);
309 spin_lock_irqsave(&gsi->lock, flags);
310 WARN_ON_ONCE(gsi->tx_qps[qp_index]);
311 gsi->tx_qps[qp_index] = qp;
312 spin_unlock_irqrestore(&gsi->lock, flags);
325 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
331 ret = ib_modify_qp(gsi->rx_qp, attr, attr_mask);
337 if (to_mqp(gsi->rx_qp)->state != IB_QPS_RTS)
340 for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index)
341 setup_qp(gsi, qp_index);
350 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
353 ret = ib_query_qp(gsi->rx_qp, qp_attr, qp_attr_mask, qp_init_attr);
354 qp_init_attr->cap = gsi->cap;
358 /* Call with gsi->lock locked */
362 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
363 struct mlx5_ib_dev *dev = to_mdev(gsi->rx_qp->device);
366 if (gsi->outstanding_pi == gsi->outstanding_ci + gsi->cap.max_send_wr) {
371 gsi_wr = &gsi->outstanding_wrs[gsi->outstanding_pi %
372 gsi->cap.max_send_wr];
373 gsi->outstanding_pi++;
390 /* Call with gsi->lock locked */
410 /* Call with gsi->lock locked */
411 static struct ib_qp *get_tx_qp(struct mlx5_ib_gsi_qp *gsi, struct ib_ud_wr *wr)
413 struct mlx5_ib_dev *dev = to_mdev(gsi->rx_qp->device);
417 if (!gsi->num_qps)
418 return gsi->rx_qp;
423 if (qp_index >= gsi->num_qps)
426 return gsi->tx_qps[qp_index];
433 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
443 spin_lock_irqsave(&gsi->lock, flags);
444 tx_qp = get_tx_qp(gsi, &cur_wr);
449 spin_unlock_irqrestore(&gsi->lock, flags);
460 gsi->outstanding_pi--;
463 spin_unlock_irqrestore(&gsi->lock, flags);
469 spin_unlock_irqrestore(&gsi->lock, flags);
478 struct mlx5_ib_gsi_qp *gsi = &mqp->gsi;
480 return ib_post_recv(gsi->rx_qp, wr, bad_wr);
483 void mlx5_ib_gsi_pkey_change(struct mlx5_ib_gsi_qp *gsi)
487 for (qp_index = 0; qp_index < gsi->num_qps; ++qp_index)
488 setup_qp(gsi, qp_index);