@@ -252,14 +252,21 @@ void iser_free_fmr_pool(struct ib_conn *ib_conn)
252
252
}
253
253
254
254
static int
255
- iser_alloc_reg_res (struct ib_device * ib_device ,
255
+ iser_alloc_reg_res (struct iser_device * device ,
256
256
struct ib_pd * pd ,
257
257
struct iser_reg_resources * res ,
258
258
unsigned int size )
259
259
{
260
+ struct ib_device * ib_dev = device -> ib_device ;
261
+ enum ib_mr_type mr_type ;
260
262
int ret ;
261
263
262
- res -> mr = ib_alloc_mr (pd , IB_MR_TYPE_MEM_REG , size );
264
+ if (ib_dev -> attrs .device_cap_flags & IB_DEVICE_SG_GAPS_REG )
265
+ mr_type = IB_MR_TYPE_SG_GAPS ;
266
+ else
267
+ mr_type = IB_MR_TYPE_MEM_REG ;
268
+
269
+ res -> mr = ib_alloc_mr (pd , mr_type , size );
263
270
if (IS_ERR (res -> mr )) {
264
271
ret = PTR_ERR (res -> mr );
265
272
iser_err ("Failed to allocate ib_fast_reg_mr err=%d\n" , ret );
@@ -277,7 +284,7 @@ iser_free_reg_res(struct iser_reg_resources *rsc)
277
284
}
278
285
279
286
static int
280
- iser_alloc_pi_ctx (struct ib_device * ib_device ,
287
+ iser_alloc_pi_ctx (struct iser_device * device ,
281
288
struct ib_pd * pd ,
282
289
struct iser_fr_desc * desc ,
283
290
unsigned int size )
@@ -291,7 +298,7 @@ iser_alloc_pi_ctx(struct ib_device *ib_device,
291
298
292
299
pi_ctx = desc -> pi_ctx ;
293
300
294
- ret = iser_alloc_reg_res (ib_device , pd , & pi_ctx -> rsc , size );
301
+ ret = iser_alloc_reg_res (device , pd , & pi_ctx -> rsc , size );
295
302
if (ret ) {
296
303
iser_err ("failed to allocate reg_resources\n" );
297
304
goto alloc_reg_res_err ;
@@ -324,7 +331,7 @@ iser_free_pi_ctx(struct iser_pi_context *pi_ctx)
324
331
}
325
332
326
333
static struct iser_fr_desc *
327
- iser_create_fastreg_desc (struct ib_device * ib_device ,
334
+ iser_create_fastreg_desc (struct iser_device * device ,
328
335
struct ib_pd * pd ,
329
336
bool pi_enable ,
330
337
unsigned int size )
@@ -336,12 +343,12 @@ iser_create_fastreg_desc(struct ib_device *ib_device,
336
343
if (!desc )
337
344
return ERR_PTR (- ENOMEM );
338
345
339
- ret = iser_alloc_reg_res (ib_device , pd , & desc -> rsc , size );
346
+ ret = iser_alloc_reg_res (device , pd , & desc -> rsc , size );
340
347
if (ret )
341
348
goto reg_res_alloc_failure ;
342
349
343
350
if (pi_enable ) {
344
- ret = iser_alloc_pi_ctx (ib_device , pd , desc , size );
351
+ ret = iser_alloc_pi_ctx (device , pd , desc , size );
345
352
if (ret )
346
353
goto pi_ctx_alloc_failure ;
347
354
}
@@ -374,7 +381,7 @@ int iser_alloc_fastreg_pool(struct ib_conn *ib_conn,
374
381
spin_lock_init (& fr_pool -> lock );
375
382
fr_pool -> size = 0 ;
376
383
for (i = 0 ; i < cmds_max ; i ++ ) {
377
- desc = iser_create_fastreg_desc (device -> ib_device , device -> pd ,
384
+ desc = iser_create_fastreg_desc (device , device -> pd ,
378
385
ib_conn -> pi_support , size );
379
386
if (IS_ERR (desc )) {
380
387
ret = PTR_ERR (desc );
0 commit comments