فهرست منبع

RDMA/cxgb4: CQ size must be IQ size - 2

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>
Steve Wise 15 سال پیش
والد
کامیت
895cf5f3d6
1فایلهای تغییر یافته به همراه4 افزوده شده و 1 حذف شده
  1. 4 1
      drivers/infiniband/hw/cxgb4/cq.c

+ 4 - 1
drivers/infiniband/hw/cxgb4/cq.c

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