dma-debug checks to verify if driver validated the address returned by dma
mapping routines when driver does unmap. If a driver doesn't call unmap,
failure to check mapping errors isn't detected and reported.
Enhance the existing bus notifier_call dma_debug_device_change() to check
for mapping errors at the same time it detects leaked dma buffers for
BUS_NOTIFY_UNBOUND_DRIVER event. It scans for mapping errors and if any
found, prints one warning message that includes mapping error count.
Signed-off-by: Shuah Khan <shuah.kh@samsung.com>
Cc: Alexander Duyck <alexander.h.duyck@intel.com>
Cc: Joerg Roedel <joro@8bytes.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
struct dma_debug_entry *entry;
unsigned long flags;
int count = 0, i;
+ int map_err_cnt = 0;
local_irq_save(flags);
spin_lock(&dma_entry_hash[i].lock);
list_for_each_entry(entry, &dma_entry_hash[i].list, list) {
if (entry->dev == dev) {
+ if (entry->map_err_type == MAP_ERR_NOT_CHECKED)
+ map_err_cnt += 1;
count += 1;
*out_entry = entry;
}
local_irq_restore(flags);
+ if (map_err_cnt)
+ dev_warn(entry->dev,
+ "DMA-API: device driver failed to check map errors: "
+ "[count] = %d\n", map_err_cnt);
return count;
}