Loading include/linux/dma-debug.h +16 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,12 @@ extern void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, extern void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, int dir); extern void debug_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t dma_addr, void *virt); extern void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, dma_addr_t addr); #else /* CONFIG_DMA_API_DEBUG */ static inline void dma_debug_init(u32 num_entries) Loading Loading @@ -73,6 +79,16 @@ static inline void debug_dma_unmap_sg(struct device *dev, { } static inline void debug_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t dma_addr, void *virt) { } static inline void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, dma_addr_t addr) { } #endif /* CONFIG_DMA_API_DEBUG */ #endif /* __DMA_DEBUG_H */ lib/dma-debug.c +45 −0 Original line number Diff line number Diff line Loading @@ -692,3 +692,48 @@ void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, } EXPORT_SYMBOL(debug_dma_unmap_sg); void debug_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t dma_addr, void *virt) { struct dma_debug_entry *entry; if (unlikely(global_disable)) return; if (unlikely(virt == NULL)) return; entry = dma_entry_alloc(); if (!entry) return; entry->type = dma_debug_coherent; entry->dev = dev; entry->paddr = virt_to_phys(virt); entry->size = size; entry->dev_addr = dma_addr; entry->direction = DMA_BIDIRECTIONAL; add_dma_entry(entry); } EXPORT_SYMBOL(debug_dma_alloc_coherent); void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, dma_addr_t addr) { struct dma_debug_entry ref = { .type = dma_debug_coherent, .dev = dev, .paddr = virt_to_phys(virt), .dev_addr = addr, .size = size, .direction = DMA_BIDIRECTIONAL, }; if (unlikely(global_disable)) return; check_unmap(&ref); } EXPORT_SYMBOL(debug_dma_free_coherent); Loading
include/linux/dma-debug.h +16 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,12 @@ extern void debug_dma_map_sg(struct device *dev, struct scatterlist *sg, extern void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nelems, int dir); extern void debug_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t dma_addr, void *virt); extern void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, dma_addr_t addr); #else /* CONFIG_DMA_API_DEBUG */ static inline void dma_debug_init(u32 num_entries) Loading Loading @@ -73,6 +79,16 @@ static inline void debug_dma_unmap_sg(struct device *dev, { } static inline void debug_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t dma_addr, void *virt) { } static inline void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, dma_addr_t addr) { } #endif /* CONFIG_DMA_API_DEBUG */ #endif /* __DMA_DEBUG_H */
lib/dma-debug.c +45 −0 Original line number Diff line number Diff line Loading @@ -692,3 +692,48 @@ void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, } EXPORT_SYMBOL(debug_dma_unmap_sg); void debug_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t dma_addr, void *virt) { struct dma_debug_entry *entry; if (unlikely(global_disable)) return; if (unlikely(virt == NULL)) return; entry = dma_entry_alloc(); if (!entry) return; entry->type = dma_debug_coherent; entry->dev = dev; entry->paddr = virt_to_phys(virt); entry->size = size; entry->dev_addr = dma_addr; entry->direction = DMA_BIDIRECTIONAL; add_dma_entry(entry); } EXPORT_SYMBOL(debug_dma_alloc_coherent); void debug_dma_free_coherent(struct device *dev, size_t size, void *virt, dma_addr_t addr) { struct dma_debug_entry ref = { .type = dma_debug_coherent, .dev = dev, .paddr = virt_to_phys(virt), .dev_addr = addr, .size = size, .direction = DMA_BIDIRECTIONAL, }; if (unlikely(global_disable)) return; check_unmap(&ref); } EXPORT_SYMBOL(debug_dma_free_coherent);