extern int dma_debug_resize_entries(u32 num_entries);
 
+extern void debug_dma_map_single(struct device *dev, const void *addr,
+                                unsigned long len);
+
 extern void debug_dma_map_page(struct device *dev, struct page *page,
                               size_t offset, size_t size,
                               int direction, dma_addr_t dma_addr,
        return 0;
 }
 
+static inline void debug_dma_map_single(struct device *dev, const void *addr,
+                                       unsigned long len)
+{
+}
+
 static inline void debug_dma_map_page(struct device *dev, struct page *page,
                                      size_t offset, size_t size,
                                      int direction, dma_addr_t dma_addr,
 
        dma_addr_t addr;
 
        BUG_ON(!valid_dma_direction(dir));
+       debug_dma_map_single(dev, ptr, size);
        addr = ops->map_page(dev, virt_to_page(ptr),
                             offset_in_page(ptr), size,
                             dir, attrs);
 
 #endif
 }
 
+void debug_dma_map_single(struct device *dev, const void *addr,
+                           unsigned long len)
+{
+       if (unlikely(dma_debug_disabled()))
+               return;
+
+       if (!virt_addr_valid(addr))
+               err_printk(dev, NULL, "DMA-API: device driver maps memory from invalid area [addr=%p] [len=%lu]\n",
+                          addr, len);
+
+       if (is_vmalloc_addr(addr))
+               err_printk(dev, NULL, "DMA-API: device driver maps memory from vmalloc area [addr=%p] [len=%lu]\n",
+                          addr, len);
+}
+EXPORT_SYMBOL(debug_dma_map_single);
+
 void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
                        size_t size, int direction, dma_addr_t dma_addr,
                        bool map_single)