|
@@ -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;
|
|
}
|
|
}
|