@@ -59,8 +59,7 @@ enum map_err_types {
59
59
* @direction: enum dma_data_direction
60
60
* @sg_call_ents: 'nents' from dma_map_sg
61
61
* @sg_mapped_ents: 'mapped_ents' from dma_map_sg
62
- * @pfn: page frame of the start address
63
- * @offset: offset of mapping relative to pfn
62
+ * @paddr: physical start address of the mapping
64
63
* @map_err_type: track whether dma_mapping_error() was checked
65
64
* @stack_len: number of backtrace entries in @stack_entries
66
65
* @stack_entries: stack of backtrace history
@@ -74,8 +73,7 @@ struct dma_debug_entry {
74
73
int direction ;
75
74
int sg_call_ents ;
76
75
int sg_mapped_ents ;
77
- unsigned long pfn ;
78
- size_t offset ;
76
+ phys_addr_t paddr ;
79
77
enum map_err_types map_err_type ;
80
78
#ifdef CONFIG_STACKTRACE
81
79
unsigned int stack_len ;
@@ -389,14 +387,6 @@ static void hash_bucket_del(struct dma_debug_entry *entry)
389
387
list_del (& entry -> list );
390
388
}
391
389
392
- static unsigned long long phys_addr (struct dma_debug_entry * entry )
393
- {
394
- if (entry -> type == dma_debug_resource )
395
- return __pfn_to_phys (entry -> pfn ) + entry -> offset ;
396
-
397
- return page_to_phys (pfn_to_page (entry -> pfn )) + entry -> offset ;
398
- }
399
-
400
390
/*
401
391
* For each mapping (initial cacheline in the case of
402
392
* dma_alloc_coherent/dma_map_page, initial cacheline in each page of a
@@ -428,8 +418,8 @@ static DEFINE_SPINLOCK(radix_lock);
428
418
429
419
static phys_addr_t to_cacheline_number (struct dma_debug_entry * entry )
430
420
{
431
- return (entry -> pfn << CACHELINE_PER_PAGE_SHIFT ) +
432
- (entry -> offset >> L1_CACHE_SHIFT );
421
+ return (( entry -> paddr >> PAGE_SHIFT ) << CACHELINE_PER_PAGE_SHIFT ) +
422
+ (offset_in_page ( entry -> paddr ) >> L1_CACHE_SHIFT );
433
423
}
434
424
435
425
static int active_cacheline_read_overlap (phys_addr_t cln )
@@ -538,11 +528,11 @@ void debug_dma_dump_mappings(struct device *dev)
538
528
if (!dev || dev == entry -> dev ) {
539
529
cln = to_cacheline_number (entry );
540
530
dev_info (entry -> dev ,
541
- "%s idx %d P=%llx N=%lx D=%llx L=%llx cln=%pa %s %s\n" ,
531
+ "%s idx %d P=%pa D=%llx L=%llx cln=%pa %s %s\n" ,
542
532
type2name [entry -> type ], idx ,
543
- phys_addr ( entry ) , entry -> pfn ,
544
- entry -> dev_addr , entry -> size ,
545
- & cln , dir2name [entry -> direction ],
533
+ & entry -> paddr , entry -> dev_addr ,
534
+ entry -> size , & cln ,
535
+ dir2name [entry -> direction ],
546
536
maperr2str [entry -> map_err_type ]);
547
537
}
548
538
}
@@ -569,13 +559,13 @@ static int dump_show(struct seq_file *seq, void *v)
569
559
list_for_each_entry (entry , & bucket -> list , list ) {
570
560
cln = to_cacheline_number (entry );
571
561
seq_printf (seq ,
572
- "%s %s %s idx %d P=%llx N=%lx D=%llx L=%llx cln=%pa %s %s\n" ,
562
+ "%s %s %s idx %d P=%pa D=%llx L=%llx cln=%pa %s %s\n" ,
573
563
dev_driver_string (entry -> dev ),
574
564
dev_name (entry -> dev ),
575
565
type2name [entry -> type ], idx ,
576
- phys_addr ( entry ) , entry -> pfn ,
577
- entry -> dev_addr , entry -> size ,
578
- & cln , dir2name [entry -> direction ],
566
+ & entry -> paddr , entry -> dev_addr ,
567
+ entry -> size , & cln ,
568
+ dir2name [entry -> direction ],
579
569
maperr2str [entry -> map_err_type ]);
580
570
}
581
571
spin_unlock_irqrestore (& bucket -> lock , flags );
@@ -1003,16 +993,16 @@ static void check_unmap(struct dma_debug_entry *ref)
1003
993
"[mapped as %s] [unmapped as %s]\n" ,
1004
994
ref -> dev_addr , ref -> size ,
1005
995
type2name [entry -> type ], type2name [ref -> type ]);
1006
- } else if (( entry -> type == dma_debug_coherent ) &&
1007
- ( phys_addr ( ref ) != phys_addr ( entry )) ) {
996
+ } else if (entry -> type == dma_debug_coherent &&
997
+ ref -> paddr != entry -> paddr ) {
1008
998
err_printk (ref -> dev , entry , "device driver frees "
1009
999
"DMA memory with different CPU address "
1010
1000
"[device address=0x%016llx] [size=%llu bytes] "
1011
- "[cpu alloc address=0x%016llx ] "
1012
- "[cpu free address=0x%016llx ]" ,
1001
+ "[cpu alloc address=0x%pa ] "
1002
+ "[cpu free address=0x%pa ]" ,
1013
1003
ref -> dev_addr , ref -> size ,
1014
- phys_addr ( entry ) ,
1015
- phys_addr ( ref ) );
1004
+ & entry -> paddr ,
1005
+ & ref -> paddr );
1016
1006
}
1017
1007
1018
1008
if (ref -> sg_call_ents && ref -> type == dma_debug_sg &&
@@ -1231,8 +1221,7 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
1231
1221
1232
1222
entry -> dev = dev ;
1233
1223
entry -> type = dma_debug_single ;
1234
- entry -> pfn = page_to_pfn (page );
1235
- entry -> offset = offset ;
1224
+ entry -> paddr = page_to_phys (page );
1236
1225
entry -> dev_addr = dma_addr ;
1237
1226
entry -> size = size ;
1238
1227
entry -> direction = direction ;
@@ -1327,8 +1316,7 @@ void debug_dma_map_sg(struct device *dev, struct scatterlist *sg,
1327
1316
1328
1317
entry -> type = dma_debug_sg ;
1329
1318
entry -> dev = dev ;
1330
- entry -> pfn = page_to_pfn (sg_page (s ));
1331
- entry -> offset = s -> offset ;
1319
+ entry -> paddr = sg_phys (s );
1332
1320
entry -> size = sg_dma_len (s );
1333
1321
entry -> dev_addr = sg_dma_address (s );
1334
1322
entry -> direction = direction ;
@@ -1374,8 +1362,7 @@ void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist,
1374
1362
struct dma_debug_entry ref = {
1375
1363
.type = dma_debug_sg ,
1376
1364
.dev = dev ,
1377
- .pfn = page_to_pfn (sg_page (s )),
1378
- .offset = s -> offset ,
1365
+ .paddr = sg_phys (s ),
1379
1366
.dev_addr = sg_dma_address (s ),
1380
1367
.size = sg_dma_len (s ),
1381
1368
.direction = dir ,
@@ -1414,16 +1401,12 @@ void debug_dma_alloc_coherent(struct device *dev, size_t size,
1414
1401
1415
1402
entry -> type = dma_debug_coherent ;
1416
1403
entry -> dev = dev ;
1417
- entry -> offset = offset_in_page (virt );
1404
+ entry -> paddr = page_to_phys ((is_vmalloc_addr (virt ) ?
1405
+ vmalloc_to_page (virt ) : virt_to_page (virt )));
1418
1406
entry -> size = size ;
1419
1407
entry -> dev_addr = dma_addr ;
1420
1408
entry -> direction = DMA_BIDIRECTIONAL ;
1421
1409
1422
- if (is_vmalloc_addr (virt ))
1423
- entry -> pfn = vmalloc_to_pfn (virt );
1424
- else
1425
- entry -> pfn = page_to_pfn (virt_to_page (virt ));
1426
-
1427
1410
add_dma_entry (entry , attrs );
1428
1411
}
1429
1412
@@ -1433,7 +1416,6 @@ void debug_dma_free_coherent(struct device *dev, size_t size,
1433
1416
struct dma_debug_entry ref = {
1434
1417
.type = dma_debug_coherent ,
1435
1418
.dev = dev ,
1436
- .offset = offset_in_page (virt ),
1437
1419
.dev_addr = dma_addr ,
1438
1420
.size = size ,
1439
1421
.direction = DMA_BIDIRECTIONAL ,
@@ -1443,10 +1425,8 @@ void debug_dma_free_coherent(struct device *dev, size_t size,
1443
1425
if (!is_vmalloc_addr (virt ) && !virt_addr_valid (virt ))
1444
1426
return ;
1445
1427
1446
- if (is_vmalloc_addr (virt ))
1447
- ref .pfn = vmalloc_to_pfn (virt );
1448
- else
1449
- ref .pfn = page_to_pfn (virt_to_page (virt ));
1428
+ ref .paddr = page_to_phys ((is_vmalloc_addr (virt ) ?
1429
+ vmalloc_to_page (virt ) : virt_to_page (virt )));
1450
1430
1451
1431
if (unlikely (dma_debug_disabled ()))
1452
1432
return ;
@@ -1469,8 +1449,7 @@ void debug_dma_map_resource(struct device *dev, phys_addr_t addr, size_t size,
1469
1449
1470
1450
entry -> type = dma_debug_resource ;
1471
1451
entry -> dev = dev ;
1472
- entry -> pfn = PHYS_PFN (addr );
1473
- entry -> offset = offset_in_page (addr );
1452
+ entry -> paddr = addr ;
1474
1453
entry -> size = size ;
1475
1454
entry -> dev_addr = dma_addr ;
1476
1455
entry -> direction = direction ;
@@ -1547,8 +1526,7 @@ void debug_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
1547
1526
struct dma_debug_entry ref = {
1548
1527
.type = dma_debug_sg ,
1549
1528
.dev = dev ,
1550
- .pfn = page_to_pfn (sg_page (s )),
1551
- .offset = s -> offset ,
1529
+ .paddr = sg_phys (s ),
1552
1530
.dev_addr = sg_dma_address (s ),
1553
1531
.size = sg_dma_len (s ),
1554
1532
.direction = direction ,
@@ -1579,8 +1557,7 @@ void debug_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
1579
1557
struct dma_debug_entry ref = {
1580
1558
.type = dma_debug_sg ,
1581
1559
.dev = dev ,
1582
- .pfn = page_to_pfn (sg_page (s )),
1583
- .offset = s -> offset ,
1560
+ .paddr = sg_phys (sg ),
1584
1561
.dev_addr = sg_dma_address (s ),
1585
1562
.size = sg_dma_len (s ),
1586
1563
.direction = direction ,
0 commit comments