diff options
Diffstat (limited to 'drivers/infiniband/hw/irdma/utils.c')
| -rw-r--r-- | drivers/infiniband/hw/irdma/utils.c | 24 | 
1 files changed, 17 insertions, 7 deletions
| diff --git a/drivers/infiniband/hw/irdma/utils.c b/drivers/infiniband/hw/irdma/utils.c index 8b42c43fc14f..398736d8c78a 100644 --- a/drivers/infiniband/hw/irdma/utils.c +++ b/drivers/infiniband/hw/irdma/utils.c @@ -2239,15 +2239,10 @@ enum irdma_status_code irdma_prm_add_pble_mem(struct irdma_pble_prm *pprm,  	sizeofbitmap = (u64)pchunk->size >> pprm->pble_shift; -	pchunk->bitmapmem.size = sizeofbitmap >> 3; -	pchunk->bitmapmem.va = kzalloc(pchunk->bitmapmem.size, GFP_KERNEL); - -	if (!pchunk->bitmapmem.va) +	pchunk->bitmapbuf = bitmap_zalloc(sizeofbitmap, GFP_KERNEL); +	if (!pchunk->bitmapbuf)  		return IRDMA_ERR_NO_MEMORY; -	pchunk->bitmapbuf = pchunk->bitmapmem.va; -	bitmap_zero(pchunk->bitmapbuf, sizeofbitmap); -  	pchunk->sizeofbitmap = sizeofbitmap;  	/* each pble is 8 bytes hence shift by 3 */  	pprm->total_pble_alloc += pchunk->size >> 3; @@ -2491,3 +2486,18 @@ void irdma_ib_qp_event(struct irdma_qp *iwqp, enum irdma_qp_event_type event)  	ibevent.element.qp = &iwqp->ibqp;  	iwqp->ibqp.event_handler(&ibevent, iwqp->ibqp.qp_context);  } + +bool irdma_cq_empty(struct irdma_cq *iwcq) +{ +	struct irdma_cq_uk *ukcq; +	u64 qword3; +	__le64 *cqe; +	u8 polarity; + +	ukcq  = &iwcq->sc_cq.cq_uk; +	cqe = IRDMA_GET_CURRENT_CQ_ELEM(ukcq); +	get_64bit_val(cqe, 24, &qword3); +	polarity = (u8)FIELD_GET(IRDMA_CQ_VALID, qword3); + +	return polarity != ukcq->polarity; +} |