|
@@ -114,6 +114,7 @@ struct ib_cq *pvrdma_create_cq(struct ib_device *ibdev,
|
|
|
union pvrdma_cmd_resp rsp;
|
|
|
struct pvrdma_cmd_create_cq *cmd = &req.create_cq;
|
|
|
struct pvrdma_cmd_create_cq_resp *resp = &rsp.create_cq_resp;
|
|
|
+ struct pvrdma_create_cq_resp cq_resp = {0};
|
|
|
struct pvrdma_create_cq ucmd;
|
|
|
|
|
|
BUILD_BUG_ON(sizeof(struct pvrdma_cqe) != 64);
|
|
@@ -197,6 +198,7 @@ struct ib_cq *pvrdma_create_cq(struct ib_device *ibdev,
|
|
|
|
|
|
cq->ibcq.cqe = resp->cqe;
|
|
|
cq->cq_handle = resp->cq_handle;
|
|
|
+ cq_resp.cqn = resp->cq_handle;
|
|
|
spin_lock_irqsave(&dev->cq_tbl_lock, flags);
|
|
|
dev->cq_tbl[cq->cq_handle % dev->dsr->caps.max_cq] = cq;
|
|
|
spin_unlock_irqrestore(&dev->cq_tbl_lock, flags);
|
|
@@ -205,7 +207,7 @@ struct ib_cq *pvrdma_create_cq(struct ib_device *ibdev,
|
|
|
cq->uar = &(to_vucontext(context)->uar);
|
|
|
|
|
|
/* Copy udata back. */
|
|
|
- if (ib_copy_to_udata(udata, &cq->cq_handle, sizeof(__u32))) {
|
|
|
+ if (ib_copy_to_udata(udata, &cq_resp, sizeof(cq_resp))) {
|
|
|
dev_warn(&dev->pdev->dev,
|
|
|
"failed to copy back udata\n");
|
|
|
pvrdma_destroy_cq(&cq->ibcq);
|