IB/iser: Use more completion queues

No reason to settle with four, can use the min between device max comp
vectors and number of cores.

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
Sagi Grimberg 2014-12-07 16:10:03 +02:00 committed by Roland Dreier
parent 7e1fd4d1e3
commit da64bdb25b
2 changed files with 12 additions and 4 deletions

View File

@ -326,8 +326,6 @@ struct iser_rx_desc {
char pad[ISER_RX_PAD_SIZE];
} __attribute__((packed));
#define ISER_MAX_CQ 4
struct iser_conn;
struct ib_conn;
struct iscsi_iser_task;
@ -378,7 +376,7 @@ struct iser_device {
struct list_head ig_list;
int refcount;
int comps_used;
struct iser_comp comps[ISER_MAX_CQ];
struct iser_comp *comps;
int (*iser_alloc_rdma_reg_res)(struct ib_conn *ib_conn,
unsigned cmds_max);
void (*iser_free_rdma_reg_res)(struct ib_conn *ib_conn);

View File

@ -104,9 +104,14 @@ static int iser_create_device_ib_res(struct iser_device *device)
return -1;
}
device->comps_used = min(ISER_MAX_CQ,
device->comps_used = min_t(int, num_online_cpus(),
device->ib_device->num_comp_vectors);
device->comps = kcalloc(device->comps_used, sizeof(*device->comps),
GFP_KERNEL);
if (!device->comps)
goto comps_err;
max_cqe = min(ISER_MAX_CQ_LEN, dev_attr->max_cqe);
iser_info("using %d CQs, device %s supports %d vectors max_cqe %d\n",
@ -165,6 +170,8 @@ cq_err:
}
ib_dealloc_pd(device->pd);
pd_err:
kfree(device->comps);
comps_err:
iser_err("failed to allocate an IB resource\n");
return -1;
}
@ -190,6 +197,9 @@ static void iser_free_device_ib_res(struct iser_device *device)
(void)ib_dereg_mr(device->mr);
(void)ib_dealloc_pd(device->pd);
kfree(device->comps);
device->comps = NULL;
device->mr = NULL;
device->pd = NULL;
}