diff options
Diffstat (limited to 'drivers/infiniband/hw/ocrdma/ocrdma_verbs.c')
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c index d16d172b6b6..2e2e7aecc99 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c @@ -53,7 +53,7 @@ int ocrdma_query_gid(struct ib_device *ibdev, u8 port,  	dev = get_ocrdma_dev(ibdev);  	memset(sgid, 0, sizeof(*sgid)); -	if (index > OCRDMA_MAX_SGID) +	if (index >= OCRDMA_MAX_SGID)  		return -EINVAL;  	memcpy(sgid, &dev->sgid_tbl[index], sizeof(*sgid)); @@ -83,8 +83,8 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr)  					IB_DEVICE_SHUTDOWN_PORT |  					IB_DEVICE_SYS_IMAGE_GUID |  					IB_DEVICE_LOCAL_DMA_LKEY; -	attr->max_sge = dev->attr.max_send_sge; -	attr->max_sge_rd = dev->attr.max_send_sge; +	attr->max_sge = min(dev->attr.max_send_sge, dev->attr.max_srq_sge); +	attr->max_sge_rd = 0;  	attr->max_cq = dev->attr.max_cq;  	attr->max_cqe = dev->attr.max_cqe;  	attr->max_mr = dev->attr.max_mr; @@ -97,7 +97,7 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr)  	    min(dev->attr.max_ord_per_qp, dev->attr.max_ird_per_qp);  	attr->max_qp_init_rd_atom = dev->attr.max_ord_per_qp;  	attr->max_srq = (dev->attr.max_qp - 1); -	attr->max_srq_sge = attr->max_sge; +	attr->max_srq_sge = attr->max_srq_sge;  	attr->max_srq_wr = dev->attr.max_rqe;  	attr->local_ca_ack_delay = dev->attr.local_ca_ack_delay;  	attr->max_fast_reg_page_list_len = 0; @@ -2301,8 +2301,10 @@ static bool ocrdma_poll_err_rcqe(struct ocrdma_qp *qp, struct ocrdma_cqe *cqe,  			*stop = true;  			expand = false;  		} -	} else +	} else { +		*polled = true;  		expand = ocrdma_update_err_rcqe(ibwc, cqe, qp, status); +	}  	return expand;  }  |