@@ -273,6 +273,23 @@ static int rdma_rw_init_single_wr(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
273
273
return 1 ;
274
274
}
275
275
276
+ static void rdma_rw_unmap_sg (struct ib_device * dev , struct scatterlist * sg ,
277
+ u32 sg_cnt , enum dma_data_direction dir )
278
+ {
279
+ if (is_pci_p2pdma_page (sg_page (sg )))
280
+ pci_p2pdma_unmap_sg (dev -> dma_device , sg , sg_cnt , dir );
281
+ else
282
+ ib_dma_unmap_sg (dev , sg , sg_cnt , dir );
283
+ }
284
+
285
+ static int rdma_rw_map_sg (struct ib_device * dev , struct scatterlist * sg ,
286
+ u32 sg_cnt , enum dma_data_direction dir )
287
+ {
288
+ if (is_pci_p2pdma_page (sg_page (sg )))
289
+ return pci_p2pdma_map_sg (dev -> dma_device , sg , sg_cnt , dir );
290
+ return ib_dma_map_sg (dev , sg , sg_cnt , dir );
291
+ }
292
+
276
293
/**
277
294
* rdma_rw_ctx_init - initialize a RDMA READ/WRITE context
278
295
* @ctx: context to initialize
@@ -295,11 +312,7 @@ int rdma_rw_ctx_init(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u8 port_num,
295
312
struct ib_device * dev = qp -> pd -> device ;
296
313
int ret ;
297
314
298
- if (is_pci_p2pdma_page (sg_page (sg )))
299
- ret = pci_p2pdma_map_sg (dev -> dma_device , sg , sg_cnt , dir );
300
- else
301
- ret = ib_dma_map_sg (dev , sg , sg_cnt , dir );
302
-
315
+ ret = rdma_rw_map_sg (dev , sg , sg_cnt , dir );
303
316
if (!ret )
304
317
return - ENOMEM ;
305
318
sg_cnt = ret ;
@@ -338,7 +351,7 @@ int rdma_rw_ctx_init(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u8 port_num,
338
351
return ret ;
339
352
340
353
out_unmap_sg :
341
- ib_dma_unmap_sg (dev , sg , sg_cnt , dir );
354
+ rdma_rw_unmap_sg (dev , sg , sg_cnt , dir );
342
355
return ret ;
343
356
}
344
357
EXPORT_SYMBOL (rdma_rw_ctx_init );
@@ -588,11 +601,7 @@ void rdma_rw_ctx_destroy(struct rdma_rw_ctx *ctx, struct ib_qp *qp, u8 port_num,
588
601
break ;
589
602
}
590
603
591
- if (is_pci_p2pdma_page (sg_page (sg )))
592
- pci_p2pdma_unmap_sg (qp -> pd -> device -> dma_device , sg ,
593
- sg_cnt , dir );
594
- else
595
- ib_dma_unmap_sg (qp -> pd -> device , sg , sg_cnt , dir );
604
+ rdma_rw_unmap_sg (qp -> pd -> device , sg , sg_cnt , dir );
596
605
}
597
606
EXPORT_SYMBOL (rdma_rw_ctx_destroy );
598
607
0 commit comments