The heap statistics have been removed and currently even basics statistics
are missing.

This patch creates per heap debugfs directory /sys/kernel/debug/<heap_name>
and adds two counters - the number of allocated buffers and number of
allocated bytes.

Signed-off-by: Alexey Skidanov <alexey.skida...@intel.com>
---
 drivers/staging/android/ion/ion.c | 40 +++++++++++++++++++++++++++++++--------
 drivers/staging/android/ion/ion.h |  3 ++-
 2 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/android/ion/ion.c 
b/drivers/staging/android/ion/ion.c
index 9907332..62335b9 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -95,6 +95,9 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap 
*heap,
                goto err1;
        }
 
+       heap->num_of_buffers++;
+       heap->num_of_alloc_bytes += len;
+
        INIT_LIST_HEAD(&buffer->attachments);
        mutex_init(&buffer->lock);
        mutex_lock(&dev->buffer_lock);
@@ -528,6 +531,8 @@ void ion_device_add_heap(struct ion_heap *heap)
 {
        struct ion_device *dev = internal_dev;
        int ret;
+       struct dentry *heap_root;
+       char debug_name[64];
 
        if (!heap->ops->allocate || !heap->ops->free)
                pr_err("%s: can not add heap with invalid ops struct.\n",
@@ -546,6 +551,33 @@ void ion_device_add_heap(struct ion_heap *heap)
        }
 
        heap->dev = dev;
+       heap->num_of_buffers = 0;
+       heap->num_of_alloc_bytes = 0;
+
+       /* Create heap root directory. If creation is failed, we may continue */
+       heap_root = debugfs_create_dir(heap->name, dev->debug_root);
+       if (!IS_ERR_OR_NULL(heap_root)) {
+               debugfs_create_u64("num_of_buffers",
+                                  0444, heap_root,
+                                  &heap->num_of_buffers);
+               debugfs_create_u64("num_of_alloc_bytes",
+                                  0444,
+                                  heap_root,
+                                  &heap->num_of_alloc_bytes);
+
+               if (heap->shrinker.count_objects &&
+                   heap->shrinker.scan_objects) {
+                       snprintf(debug_name, 64, "%s_shrink", heap->name);
+                       debugfs_create_file(debug_name,
+                                           0644,
+                                           heap_root,
+                                           heap,
+                                           &debug_shrink_fops);
+               }
+       } else {
+               pr_err("%s: Failed to create heap dir in debugfs\n", __func__);
+       }
+
        down_write(&dev->lock);
        heap->id = heap_id++;
        /*
@@ -555,14 +587,6 @@ void ion_device_add_heap(struct ion_heap *heap)
        plist_node_init(&heap->node, -heap->id);
        plist_add(&heap->node, &dev->heaps);
 
-       if (heap->shrinker.count_objects && heap->shrinker.scan_objects) {
-               char debug_name[64];
-
-               snprintf(debug_name, 64, "%s_shrink", heap->name);
-               debugfs_create_file(debug_name, 0644, dev->debug_root,
-                                   heap, &debug_shrink_fops);
-       }
-
        dev->heap_cnt++;
        up_write(&dev->lock);
 }
diff --git a/drivers/staging/android/ion/ion.h 
b/drivers/staging/android/ion/ion.h
index 16cbd38..8f1326a 100644
--- a/drivers/staging/android/ion/ion.h
+++ b/drivers/staging/android/ion/ion.h
@@ -179,9 +179,10 @@ struct ion_heap {
        spinlock_t free_lock;
        wait_queue_head_t waitqueue;
        struct task_struct *task;
-
        int (*debug_show)(struct ion_heap *heap, struct seq_file *s,
                          void *unused);
+       u64 num_of_buffers;
+       u64 num_of_alloc_bytes;
 };
 
 /**
-- 
2.7.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to