rk: ion: output iommu map info in /d/ion/clients/xx
authorCMY <cmy@rock-chips.com>
Wed, 9 Apr 2014 01:30:39 +0000 (09:30 +0800)
committerCMY <cmy@rock-chips.com>
Wed, 9 Apr 2014 02:22:47 +0000 (10:22 +0800)
drivers/staging/android/ion/ion.c
drivers/staging/android/ion/ion_carveout_heap.c

index 00497a8671b5a3398e599e11bdca649c578c5856..d53172eecf1d39d7fed09c5c2fb1dd7cb02c7b39 100755 (executable)
@@ -116,7 +116,7 @@ struct ion_handle {
        int id;
 };
 
-static void ion_iommu_force_unmap(struct ion_buffer *buffer);
+void ion_iommu_force_unmap(struct ion_buffer *buffer);
 
 bool ion_buffer_fault_user_mappings(struct ion_buffer *buffer)
 {
@@ -893,6 +893,29 @@ out:
 EXPORT_SYMBOL(ion_unmap_iommu);
 #endif
 
+static int ion_debug_client_show_buffer_map(struct seq_file *s, struct ion_buffer *buffer)
+{
+       struct ion_iommu_map *iommu_map;
+       struct rb_node *node;
+       const struct rb_root *rb = &(buffer->iommu_maps);
+
+       pr_debug("%s: (%p)\n", __func__, buffer);
+
+       mutex_lock(&buffer->lock);
+
+       while ((node = rb_first(rb)) != 0) {
+               iommu_map = rb_entry(node, struct ion_iommu_map, node);
+               /* set ref count to 1 to force release */
+               seq_printf(s, "\t%08x@%08lx : %d\n", iommu_map->mapped_size, 
+                               iommu_map->iova_addr,
+                               atomic_read(&iommu_map->ref.refcount));
+       }
+
+       mutex_unlock(&buffer->lock);
+
+       return 0;
+}
+
 static int ion_debug_client_show_buffer(struct seq_file *s, void *unused)
 {
        struct ion_client *client = s->private;
@@ -901,7 +924,7 @@ static int ion_debug_client_show_buffer(struct seq_file *s, void *unused)
        size_t len;
 
        seq_printf(s, "----------------------------------------------------\n");
-       seq_printf(s, "%16.s: %12.s %8.s %4.s %4.s %4.s\n", "heap_name", "addr", 
+       seq_printf(s, "%16.s: %12.s %8.s %4.s %4.s %4.s\n", "heap_name", "addr",
                "size", "HC", "IBR", "IHR");
        mutex_lock(&client->lock);
        for (n = rb_first(&client->handles); n; n = rb_next(n)) {
@@ -911,9 +934,10 @@ static int ion_debug_client_show_buffer(struct seq_file *s, void *unused)
                        buffer->heap->ops->phys(buffer->heap, buffer, &addr, &len);
                        seq_printf(s, "%16.16s: 0x%08lx %8zuKB %4d %4d %4d\n",
                                buffer->heap->name, addr, len>>10, buffer->handle_count,
-                               atomic_read(&buffer->ref.refcount), 
+                               atomic_read(&buffer->ref.refcount),
                                atomic_read(&handle->ref.refcount));
                }
+               ion_debug_client_show_buffer_map(s, buffer);
        }
        mutex_unlock(&client->lock);
 
index 2bd0e51aba864e739549fb30ebbdee8b52599629..d957a22ba218d7a6db2b053d147a8a6f204f6923 100644 (file)
@@ -158,7 +158,7 @@ struct ion_heap *ion_carveout_heap_create(struct ion_platform_heap *heap_data)
        page = pfn_to_page(PFN_DOWN(heap_data->base));
        size = heap_data->size;
 
-       printk("base:%x  size:%x  page:%p\n", heap_data->base, size, page);
+       printk("%s: %x@%lx\n", __func__, size, heap_data->base);
 
        ion_pages_sync_for_device(NULL, page, size, DMA_BIDIRECTIONAL);