1444
1445 nes_debug(NES_DBG_QP, "Waiting for create iWARP QP%u to complete.\n",
1446 nesqp->hwqp.qp_id);
1447 ret = wait_event_timeout(cqp_request->waitq,
1448 (cqp_request->request_done != 0), NES_EVENT_TIMEOUT);
1449 nes_debug(NES_DBG_QP, "Create iwarp QP%u completed, wait_event_timeout ret=%u,"
1450 " nesdev->cqp_head = %u, nesdev->cqp.sq_tail = %u,"
1451 " CQP Major:Minor codes = 0x%04X:0x%04X.\n",
1452 nesqp->hwqp.qp_id, ret, nesdev->cqp.sq_head, nesdev->cqp.sq_tail,
1453 cqp_request->major_code, cqp_request->minor_code);
1454 if ((!ret) || (cqp_request->major_code)) {
1455 nes_put_cqp_request(nesdev, cqp_request);
1456 nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
1457 nes_free_qp_mem(nesdev, nesqp,virt_wqs);
1458 kfree(nesqp->allocated_buffer);
1459 if (!ret) {
1460 return ERR_PTR(-ETIME);
1461 } else {
1462 return ERR_PTR(-EIO);
1463 }
1464 }
1465
1466 nes_put_cqp_request(nesdev, cqp_request);
1467
1468 if (ibpd->uobject) {
1469 uresp.mmap_sq_db_index = nesqp->mmap_sq_db_index;
1470 uresp.actual_sq_size = sq_size;
1471 uresp.actual_rq_size = rq_size;
1472 uresp.qp_id = nesqp->hwqp.qp_id;
1473 uresp.nes_drv_opt = nes_drv_opt;
1474 if (ib_copy_to_udata(udata, &uresp, sizeof uresp)) {
1475 nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
1476 nes_free_qp_mem(nesdev, nesqp,virt_wqs);
1477 kfree(nesqp->allocated_buffer);
1478 return ERR_PTR(-EFAULT);
1479 }
1480 }
1481
1482 nes_debug(NES_DBG_QP, "QP%u structure located @%p.Size = %u.\n",
1483 nesqp->hwqp.qp_id, nesqp, (u32)sizeof(*nesqp));
1484 spin_lock_init(&nesqp->lock);