Skip to content

Commit

Permalink
RDMA/srp: Make the channel count configurable per target
Browse files Browse the repository at this point in the history
Increase the flexibility of the SRP initiator driver by making the channel
count configurable per target instead of only providing a kernel module
parameter for configuring the channel count.

Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Bart Van Assche <[email protected]>
Signed-off-by: Jason Gunthorpe <[email protected]>
  • Loading branch information
bvanassche authored and jgunthorpe committed May 29, 2020
1 parent 50aec2c commit 87fee61
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions drivers/infiniband/ulp/srp/ib_srp.c
Original file line number Diff line number Diff line change
Expand Up @@ -3424,6 +3424,7 @@ enum {
SRP_OPT_IP_DEST = 1 << 16,
SRP_OPT_TARGET_CAN_QUEUE= 1 << 17,
SRP_OPT_MAX_IT_IU_SIZE = 1 << 18,
SRP_OPT_CH_COUNT = 1 << 19,
};

static unsigned int srp_opt_mandatory[] = {
Expand Down Expand Up @@ -3457,6 +3458,7 @@ static const match_table_t srp_opt_tokens = {
{ SRP_OPT_IP_SRC, "src=%s" },
{ SRP_OPT_IP_DEST, "dest=%s" },
{ SRP_OPT_MAX_IT_IU_SIZE, "max_it_iu_size=%d" },
{ SRP_OPT_CH_COUNT, "ch_count=%u", },
{ SRP_OPT_ERR, NULL }
};

Expand Down Expand Up @@ -3758,6 +3760,14 @@ static int srp_parse_options(struct net *net, const char *buf,
target->max_it_iu_size = token;
break;

case SRP_OPT_CH_COUNT:
if (match_int(args, &token) || token < 1) {
pr_warn("bad channel count %s\n", p);
goto out;
}
target->ch_count = token;
break;

default:
pr_warn("unknown parameter or missing value '%s' in target creation request\n",
p);
Expand Down Expand Up @@ -3921,11 +3931,13 @@ static ssize_t srp_create_target(struct device *dev,
goto out;

ret = -ENOMEM;
target->ch_count = max_t(unsigned, num_online_nodes(),
min(ch_count ? :
min(4 * num_online_nodes(),
ibdev->num_comp_vectors),
num_online_cpus()));
if (target->ch_count == 0)
target->ch_count =
max_t(unsigned int, num_online_nodes(),
min(ch_count ?:
min(4 * num_online_nodes(),
ibdev->num_comp_vectors),
num_online_cpus()));
target->ch = kcalloc(target->ch_count, sizeof(*target->ch),
GFP_KERNEL);
if (!target->ch)
Expand Down

0 comments on commit 87fee61

Please sign in to comment.