14
14
#include <linux/err.h>
15
15
#include <linux/ctype.h>
16
16
#include <linux/processor.h>
17
- #include <linux/dma-mapping.h>
18
- #include <linux/mm.h>
19
17
20
18
#include "ism.h"
21
19
@@ -294,15 +292,13 @@ static int ism_read_local_gid(struct ism_dev *ism)
294
292
static void ism_free_dmb (struct ism_dev * ism , struct ism_dmb * dmb )
295
293
{
296
294
clear_bit (dmb -> sba_idx , ism -> sba_bitmap );
297
- dma_unmap_page (& ism -> pdev -> dev , dmb -> dma_addr , dmb -> dmb_len ,
298
- DMA_FROM_DEVICE );
299
- folio_put (virt_to_folio (dmb -> cpu_addr ));
295
+ dma_free_coherent (& ism -> pdev -> dev , dmb -> dmb_len ,
296
+ dmb -> cpu_addr , dmb -> dma_addr );
300
297
}
301
298
302
299
static int ism_alloc_dmb (struct ism_dev * ism , struct ism_dmb * dmb )
303
300
{
304
301
unsigned long bit ;
305
- int rc ;
306
302
307
303
if (PAGE_ALIGN (dmb -> dmb_len ) > dma_get_max_seg_size (& ism -> pdev -> dev ))
308
304
return - EINVAL ;
@@ -319,30 +315,14 @@ static int ism_alloc_dmb(struct ism_dev *ism, struct ism_dmb *dmb)
319
315
test_and_set_bit (dmb -> sba_idx , ism -> sba_bitmap ))
320
316
return - EINVAL ;
321
317
322
- dmb -> cpu_addr =
323
- folio_address (folio_alloc (GFP_KERNEL | __GFP_NOWARN |
324
- __GFP_NOMEMALLOC | __GFP_NORETRY ,
325
- get_order (dmb -> dmb_len )));
318
+ dmb -> cpu_addr = dma_alloc_coherent (& ism -> pdev -> dev , dmb -> dmb_len ,
319
+ & dmb -> dma_addr ,
320
+ GFP_KERNEL | __GFP_NOWARN |
321
+ __GFP_NOMEMALLOC | __GFP_NORETRY );
322
+ if (!dmb -> cpu_addr )
323
+ clear_bit (dmb -> sba_idx , ism -> sba_bitmap );
326
324
327
- if (!dmb -> cpu_addr ) {
328
- rc = - ENOMEM ;
329
- goto out_bit ;
330
- }
331
- dmb -> dma_addr = dma_map_page (& ism -> pdev -> dev ,
332
- virt_to_page (dmb -> cpu_addr ), 0 ,
333
- dmb -> dmb_len , DMA_FROM_DEVICE );
334
- if (dma_mapping_error (& ism -> pdev -> dev , dmb -> dma_addr )) {
335
- rc = - ENOMEM ;
336
- goto out_free ;
337
- }
338
-
339
- return 0 ;
340
-
341
- out_free :
342
- kfree (dmb -> cpu_addr );
343
- out_bit :
344
- clear_bit (dmb -> sba_idx , ism -> sba_bitmap );
345
- return rc ;
325
+ return dmb -> cpu_addr ? 0 : - ENOMEM ;
346
326
}
347
327
348
328
int ism_register_dmb (struct ism_dev * ism , struct ism_dmb * dmb ,
0 commit comments