Commit a202e873 authored by Chris Moore's avatar Chris Moore Committed by Jiri Slaby

IB/isert: Adjust CQ size to HW limits

commit b1a5ad00 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: default avatarChris Moore <chris.moore@emulex.com>
Reviewied-by: default avatarSagi Grimberg <sagig@mellanox.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
parent 1b0a2100
...@@ -219,12 +219,16 @@ isert_create_device_ib_res(struct isert_device *device) ...@@ -219,12 +219,16 @@ isert_create_device_ib_res(struct isert_device *device)
struct isert_cq_desc *cq_desc; struct isert_cq_desc *cq_desc;
struct ib_device_attr *dev_attr; struct ib_device_attr *dev_attr;
int ret = 0, i, j; int ret = 0, i, j;
int max_rx_cqe, max_tx_cqe;
dev_attr = &device->dev_attr; dev_attr = &device->dev_attr;
ret = isert_query_device(ib_dev, dev_attr); ret = isert_query_device(ib_dev, dev_attr);
if (ret) if (ret)
return 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 */ /* asign function handlers */
if (dev_attr->device_cap_flags & IB_DEVICE_MEM_MGT_EXTENSIONS) { if (dev_attr->device_cap_flags & IB_DEVICE_MEM_MGT_EXTENSIONS) {
device->use_frwr = 1; device->use_frwr = 1;
...@@ -266,7 +270,7 @@ isert_create_device_ib_res(struct isert_device *device) ...@@ -266,7 +270,7 @@ isert_create_device_ib_res(struct isert_device *device)
isert_cq_rx_callback, isert_cq_rx_callback,
isert_cq_event_callback, isert_cq_event_callback,
(void *)&cq_desc[i], (void *)&cq_desc[i],
ISER_MAX_RX_CQ_LEN, i); max_rx_cqe, i);
if (IS_ERR(device->dev_rx_cq[i])) { if (IS_ERR(device->dev_rx_cq[i])) {
ret = PTR_ERR(device->dev_rx_cq[i]); ret = PTR_ERR(device->dev_rx_cq[i]);
device->dev_rx_cq[i] = NULL; device->dev_rx_cq[i] = NULL;
...@@ -278,7 +282,7 @@ isert_create_device_ib_res(struct isert_device *device) ...@@ -278,7 +282,7 @@ isert_create_device_ib_res(struct isert_device *device)
isert_cq_tx_callback, isert_cq_tx_callback,
isert_cq_event_callback, isert_cq_event_callback,
(void *)&cq_desc[i], (void *)&cq_desc[i],
ISER_MAX_TX_CQ_LEN, i); max_tx_cqe, i);
if (IS_ERR(device->dev_tx_cq[i])) { if (IS_ERR(device->dev_tx_cq[i])) {
ret = PTR_ERR(device->dev_tx_cq[i]); ret = PTR_ERR(device->dev_tx_cq[i]);
device->dev_tx_cq[i] = NULL; device->dev_tx_cq[i] = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment