Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da64bdb2 authored by Sagi Grimberg's avatar Sagi Grimberg Committed by Roland Dreier
Browse files

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: default avatarSagi Grimberg <sagig@mellanox.com>
Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 7e1fd4d1
Loading
Loading
Loading
Loading
+1 −3
Original line number Original line Diff line number Diff line
@@ -326,8 +326,6 @@ struct iser_rx_desc {
	char		             pad[ISER_RX_PAD_SIZE];
	char		             pad[ISER_RX_PAD_SIZE];
} __attribute__((packed));
} __attribute__((packed));


#define ISER_MAX_CQ 4

struct iser_conn;
struct iser_conn;
struct ib_conn;
struct ib_conn;
struct iscsi_iser_task;
struct iscsi_iser_task;
@@ -378,7 +376,7 @@ struct iser_device {
	struct list_head             ig_list;
	struct list_head             ig_list;
	int                          refcount;
	int                          refcount;
	int			     comps_used;
	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,
	int                          (*iser_alloc_rdma_reg_res)(struct ib_conn *ib_conn,
								unsigned cmds_max);
								unsigned cmds_max);
	void                         (*iser_free_rdma_reg_res)(struct ib_conn *ib_conn);
	void                         (*iser_free_rdma_reg_res)(struct ib_conn *ib_conn);
+11 −1
Original line number Original line Diff line number Diff line
@@ -104,9 +104,14 @@ static int iser_create_device_ib_res(struct iser_device *device)
		return -1;
		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->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);
	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",
	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);
	ib_dealloc_pd(device->pd);
pd_err:
pd_err:
	kfree(device->comps);
comps_err:
	iser_err("failed to allocate an IB resource\n");
	iser_err("failed to allocate an IB resource\n");
	return -1;
	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_dereg_mr(device->mr);
	(void)ib_dealloc_pd(device->pd);
	(void)ib_dealloc_pd(device->pd);


	kfree(device->comps);
	device->comps = NULL;

	device->mr = NULL;
	device->mr = NULL;
	device->pd = NULL;
	device->pd = NULL;
}
}