Home | History | Annotate | Download | only in net

Lines Matching refs:qp

147 			ib_refill_recv ( ibdev, wq->qp );
167 * @ret qp Queue pair
178 struct ib_queue_pair *qp;
185 total_size = ( sizeof ( *qp ) +
186 ( num_send_wqes * sizeof ( qp->send.iobufs[0] ) ) +
187 ( num_recv_wqes * sizeof ( qp->recv.iobufs[0] ) ) );
188 qp = zalloc ( total_size );
189 if ( ! qp )
191 qp->ibdev = ibdev;
192 list_add ( &qp->list, &ibdev->qps );
193 qp->type = type;
194 qp->send.qp = qp;
195 qp->send.is_send = 1;
196 qp->send.cq = send_cq;
197 list_add ( &qp->send.list, &send_cq->work_queues );
198 qp->send.psn = ( random() & 0xffffffUL );
199 qp->send.num_wqes = num_send_wqes;
200 qp->send.iobufs = ( ( ( void * ) qp ) + sizeof ( *qp ) );
201 qp->recv.qp = qp;
202 qp->recv.cq = recv_cq;
203 list_add ( &qp->recv.list, &recv_cq->work_queues );
204 qp->recv.psn = ( random() & 0xffffffUL );
205 qp->recv.num_wqes = num_recv_wqes;
206 qp->recv.iobufs = ( ( ( void * ) qp ) + sizeof ( *qp ) +
207 ( num_send_wqes * sizeof ( qp->send.iobufs[0] ) ));
208 INIT_LIST_HEAD ( &qp->mgids );
211 if ( ( rc = ibdev->op->create_qp ( ibdev, qp ) ) != 0 ) {
217 ibdev, qp, ib_qp_get_drvdata ( qp ), qp->qpn );
219 ibdev, qp->qpn, num_send_wqes, qp->send.iobufs,
220 qp->recv.iobufs );
222 ibdev, qp->qpn, num_recv_wqes, qp->recv.iobufs,
223 ( ( ( void * ) qp ) + total_size ) );
228 qp->ext_qpn = IB_QPN_SMI;
231 qp->ext_qpn = IB_QPN_GSI;
234 qp->ext_qpn = qp->qpn;
237 if ( qp->ext_qpn != qp->qpn ) {
239 ibdev, qp->qpn, qp->ext_qpn );
242 return qp;
244 ibdev->op->destroy_qp ( ibdev, qp );
246 list_del ( &qp->send.list );
247 list_del ( &qp->recv.list );
248 list_del ( &qp->list );
249 free ( qp );
258 * @v qp Queue pair
262 int ib_modify_qp ( struct ib_device *ibdev, struct ib_queue_pair *qp ) {
265 DBGC ( ibdev, "IBDEV %p modifying QPN %#lx\n", ibdev, qp->qpn );
267 if ( ( rc = ibdev->op->modify_qp ( ibdev, qp ) ) != 0 ) {
269 ibdev, qp->qpn, strerror ( rc ) );
280 * @v qp Queue pair
282 void ib_destroy_qp ( struct ib_device *ibdev, struct ib_queue_pair *qp ) {
287 ibdev, qp->qpn );
289 assert ( list_empty ( &qp->mgids ) );
292 ibdev->op->destroy_qp ( ibdev, qp );
295 for ( i = 0 ; i < qp->send.num_wqes ; i++ ) {
296 if ( ( iobuf = qp->send.iobufs[i] ) != NULL )
297 ib_complete_send ( ibdev, qp, iobuf, -ECANCELED );
299 for ( i = 0 ; i < qp->recv.num_wqes ; i++ ) {
300 if ( ( iobuf = qp->recv.iobufs[i] ) != NULL ) {
301 ib_complete_recv ( ibdev, qp, NULL, iobuf,
307 list_del ( &qp->send.list );
308 list_del ( &qp->recv.list );
310 /* Free QP */
311 list_del ( &qp->list );
312 free ( qp );
320 * @ret qp Queue pair, or NULL
324 struct ib_queue_pair *qp;
326 list_for_each_entry ( qp, &ibdev->qps, list ) {
327 if ( ( qpn == qp->qpn ) || ( qpn == qp->ext_qpn ) )
328 return qp;
338 * @ret qp Queue pair, or NULL
342 struct ib_queue_pair *qp;
345 list_for_each_entry ( qp, &ibdev->qps, list ) {
346 list_for_each_entry ( mgid, &qp->mgids, list ) {
349 return qp;
369 if ( ( wq->qp->qpn == qpn ) && ( wq->is_send == is_send ) )
379 * @v qp Queue pair
384 int ib_post_send ( struct ib_device *ibdev, struct ib_queue_pair *qp,
391 if ( qp->send.fill >= qp->send.num_wqes ) {
393 ibdev, qp->qpn );
399 av = &qp->av;
407 av->qkey = qp->qkey;
412 if ( ( rc = ibdev->op->post_send ( ibdev, qp, av, iobuf ) ) != 0 ) {
414 "%s\n", ibdev, qp->qpn, strerror ( rc ) );
418 qp->send.fill++;
426 * @v qp Queue pair
430 int ib_post_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp,
437 ibdev, qp->qpn, iob_tailroom ( iobuf ) );
442 if ( qp->recv.fill >= qp->recv.num_wqes ) {
444 ibdev, qp->qpn );
449 if ( ( rc = ibdev->op->post_recv ( ibdev, qp, iobuf ) ) != 0 ) {
451 "%s\n", ibdev, qp->qpn, strerror ( rc ) );
455 qp->recv.fill++;
463 * @v qp Queue pair
467 void ib_complete_send ( struct ib_device *ibdev, struct ib_queue_pair *qp,
470 if ( qp->send.cq->op->complete_send ) {
471 qp->send.cq->op->complete_send ( ibdev, qp, iobuf, rc );
475 qp->send.fill--;
482 * @v qp Queue pair
487 void ib_complete_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp,
491 if ( qp->recv.cq->op->complete_recv ) {
492 qp->recv.cq->op->complete_recv ( ibdev, qp, av, iobuf, rc );
496 qp->recv.fill--;
503 * @v qp Queue pair
505 void ib_refill_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp ) {
510 while ( qp->recv.fill < qp->recv.num_wqes ) {
520 if ( ( rc = ib_post_recv ( ibdev, qp, iobuf ) ) != 0 ) {
648 * @v qp Queue pair
656 int ib_mcast_attach ( struct ib_device *ibdev, struct ib_queue_pair *qp,
668 list_add ( &mgid->list, &qp->mgids );
671 if ( ( rc = ibdev->op->mcast_attach ( ibdev, qp, gid ) ) != 0 )
687 * @v qp Queue pair
690 void ib_mcast_detach ( struct ib_device *ibdev, struct ib_queue_pair *qp,
695 ibdev->op->mcast_detach ( ibdev, qp, gid );
698 list_for_each_entry ( mgid, &qp->mgids, list ) {