RDMA/cxgb4: CQ size must be IQ size - 2
authorSteve Wise <swise@opengridcomputing.com>
Thu, 20 May 2010 21:57:38 +0000 (16:57 -0500)
committerRoland Dreier <rolandd@cisco.com>
Tue, 25 May 2010 04:08:00 +0000 (21:08 -0700)
We need 1 extra entry for the status page and 1 to always have 1 free
entry to detect when the queue is full.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/cxgb4/cq.c

index fb1aafc..46ac00f 100644 (file)
@@ -780,6 +780,9 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, int entries,
        /* account for the status page. */
        entries++;
 
+       /* IQ needs one extra entry to differentiate full vs empty. */
+       entries++;
+
        /*
         * entries must be multiple of 16 for HW.
         */
@@ -801,7 +804,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, int entries,
 
        chp->rhp = rhp;
        chp->cq.size--;                         /* status page */
-       chp->ibcq.cqe = chp->cq.size;
+       chp->ibcq.cqe = chp->cq.size - 1;
        spin_lock_init(&chp->lock);
        atomic_set(&chp->refcnt, 1);
        init_waitqueue_head(&chp->wait);