diff mbox

[1/1] IB/srp: fix mr allocation when the device supports sg gaps

Message ID 1482864552-27605-2-git-send-email-maxg@mellanox.com (mailing list archive)
State Superseded
Headers show

Commit Message

Max Gurtovoy Dec. 27, 2016, 6:49 p.m. UTC
From: Israel Rukshin <israelr@mellanox.com>

If the device support arbitrary sg list mapping (device cap
IB_DEVICE_SG_GAPS_REG set) we allocate the memory regions with
IB_MR_TYPE_SG_GAPS.

Signed-off-by: Israel Rukshin <israelr@mellanox.com>
Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
---
 drivers/infiniband/ulp/srp/ib_srp.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Leon Romanovsky Dec. 28, 2016, 5:49 a.m. UTC | #1
On Tue, Dec 27, 2016 at 08:49:12PM +0200, Max Gurtovoy wrote:
> From: Israel Rukshin <israelr@mellanox.com>
>
> If the device support arbitrary sg list mapping (device cap
> IB_DEVICE_SG_GAPS_REG set) we allocate the memory regions with
> IB_MR_TYPE_SG_GAPS.
>
> Signed-off-by: Israel Rukshin <israelr@mellanox.com>
> Signed-off-by: Max Gurtovoy <maxg@mellanox.com>

Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Bart Van Assche Dec. 28, 2016, 10:13 a.m. UTC | #2
T24gMTIvMjcvMjAxNiAwNzo0OSBQTSwgTWF4IEd1cnRvdm95IHdyb3RlOg0KPiBGcm9tOiBJc3Jh
ZWwgUnVrc2hpbiA8aXNyYWVsckBtZWxsYW5veC5jb20+DQo+wqANCj4gSWYgdGhlIGRldmljZSBz
dXBwb3J0IGFyYml0cmFyeSBzZyBsaXN0IG1hcHBpbmcgKGRldmljZSBjYXANCj4NCklCX0RFVklD
RV9TR19HQVBTX1JFRyBzZXQpIHdlIGFsbG9jYXRlIHRoZSBtZW1vcnkgcmVnaW9ucyB3aXRoDQo+
IElCX01SX1RZUEVfU0dfR0FQUy4NCg0KSSB0aGluayB0aGUgIkZpeGVzOiIgYW5kICJDYzogc3Rh
YmxlIiB0YWdzIGFyZSBtaXNzaW5nIGZyb20gdGhpcw0KcGF0Y2guDQoNCkJhcnQu
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 8ddc071..0f67cf9 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -371,6 +371,7 @@  static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
 	struct srp_fr_desc *d;
 	struct ib_mr *mr;
 	int i, ret = -EINVAL;
+	enum ib_mr_type mr_type;
 
 	if (pool_size <= 0)
 		goto err;
@@ -384,9 +385,13 @@  static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
 	spin_lock_init(&pool->lock);
 	INIT_LIST_HEAD(&pool->free_list);
 
+	if (device->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG)
+		mr_type = IB_MR_TYPE_SG_GAPS;
+	else
+		mr_type = IB_MR_TYPE_MEM_REG;
+
 	for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
-		mr = ib_alloc_mr(pd, IB_MR_TYPE_MEM_REG,
-				 max_page_list_len);
+		mr = ib_alloc_mr(pd, mr_type, max_page_list_len);
 		if (IS_ERR(mr)) {
 			ret = PTR_ERR(mr);
 			if (ret == -ENOMEM)