| From b1a5ad006b34ded9dc7ec64988deba1b3ecad367 Mon Sep 17 00:00:00 2001 |
| From: Chris Moore <Chris.Moore@Emulex.Com> |
| Date: Tue, 4 Nov 2014 16:28:29 +0000 |
| Subject: IB/isert: Adjust CQ size to HW limits |
| |
| From: Chris Moore <Chris.Moore@Emulex.Com> |
| |
| commit b1a5ad006b34ded9dc7ec64988deba1b3ecad367 upstream. |
| |
| isert has an issue of trying to create a CQ with more CQEs than are |
| supported by the hardware, that currently results in failures during |
| isert_device creation during first session login. |
| |
| This is the isert version of the patch that Minh Tran submitted for |
| iser, and is simple a workaround required to function with existing |
| ocrdma hardware. |
| |
| Signed-off-by: Chris Moore <chris.moore@emulex.com> |
| Reviewied-by: Sagi Grimberg <sagig@mellanox.com> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/infiniband/ulp/isert/ib_isert.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/infiniband/ulp/isert/ib_isert.c |
| +++ b/drivers/infiniband/ulp/isert/ib_isert.c |
| @@ -220,12 +220,16 @@ isert_create_device_ib_res(struct isert_ |
| struct isert_cq_desc *cq_desc; |
| struct ib_device_attr *dev_attr; |
| int ret = 0, i, j; |
| + int max_rx_cqe, max_tx_cqe; |
| |
| dev_attr = &device->dev_attr; |
| ret = isert_query_device(ib_dev, dev_attr); |
| if (ret) |
| return ret; |
| |
| + max_rx_cqe = min(ISER_MAX_RX_CQ_LEN, dev_attr->max_cqe); |
| + max_tx_cqe = min(ISER_MAX_TX_CQ_LEN, dev_attr->max_cqe); |
| + |
| /* asign function handlers */ |
| if (dev_attr->device_cap_flags & IB_DEVICE_MEM_MGT_EXTENSIONS) { |
| device->use_fastreg = 1; |
| @@ -261,7 +265,7 @@ isert_create_device_ib_res(struct isert_ |
| isert_cq_rx_callback, |
| isert_cq_event_callback, |
| (void *)&cq_desc[i], |
| - ISER_MAX_RX_CQ_LEN, i); |
| + max_rx_cqe, i); |
| if (IS_ERR(device->dev_rx_cq[i])) { |
| ret = PTR_ERR(device->dev_rx_cq[i]); |
| device->dev_rx_cq[i] = NULL; |
| @@ -273,7 +277,7 @@ isert_create_device_ib_res(struct isert_ |
| isert_cq_tx_callback, |
| isert_cq_event_callback, |
| (void *)&cq_desc[i], |
| - ISER_MAX_TX_CQ_LEN, i); |
| + max_tx_cqe, i); |
| if (IS_ERR(device->dev_tx_cq[i])) { |
| ret = PTR_ERR(device->dev_tx_cq[i]); |
| device->dev_tx_cq[i] = NULL; |