Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f044b1e authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ion: msm: enable debugfs for ion heaps"

parents e8eaa8ee 016daf24
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ int ion_populate_vm_list(unsigned long flags, unsigned int *vm_list,
	}
	return 0;
}
EXPORT_SYMBOL(ion_populate_vm_list);

int ion_hyp_unassign_sg(struct sg_table *sgt, int *source_vm_list,
			int source_nelems, bool clear_page_private)
+43 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@
 */

#include <linux/err.h>
#include <linux/debugfs.h>
#include <linux/file.h>
#include <linux/io.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
@@ -95,6 +97,46 @@ static struct heap_types_info {
	MAKE_HEAP_TYPE_MAPPING(HYP_CMA),
};

static int msm_ion_debug_heap_show(struct seq_file *s, void *unused)
{
	struct msm_ion_heap *msm_heap = s->private;

	if (msm_heap && msm_heap->debug_show)
		msm_heap->debug_show(&msm_heap->ion_heap, s, unused);

	return 0;
}

static int msm_ion_debug_heap_open(struct inode *inode, struct file *file)
{
	return single_open(file, msm_ion_debug_heap_show, inode->i_private);
}

static const struct file_operations msm_ion_debug_heap_fops = {
	.open = msm_ion_debug_heap_open,
	.read = seq_read,
	.llseek = seq_lseek,
	.release = single_release,
};

static void msm_ion_debugfs_create_file(struct msm_ion_heap *msm_heap)
{
	char debug_name[64], buf[256];
	struct dentry *debugfs_root;
	struct ion_heap *heap;

	if (msm_heap && msm_heap->debug_show &&
	    msm_heap->ion_heap.debugfs_dir) {
		heap = &msm_heap->ion_heap;
		debugfs_root = heap->debugfs_dir;
		scnprintf(debug_name, 64, "%s_stats", heap->name);
		if (!debugfs_create_file(debug_name, 0664, debugfs_root,
					 msm_heap, &msm_ion_debug_heap_fops))
			pr_err("Failed to create heap debugfs at %s/%s\n",
			       dentry_path(debugfs_root, buf, 256), debug_name);
	}
}

static struct ion_heap *ion_heap_create(struct ion_platform_heap *heap_data)
{
	struct ion_heap *heap = NULL;
@@ -451,6 +493,7 @@ static int msm_ion_probe(struct platform_device *pdev)
		}

		ion_device_add_heap(heaps[i]);
		msm_ion_debugfs_create_file(to_msm_ion_heap(heaps[i]));
	}
	free_pdata(pdata);

+4 −0
Original line number Diff line number Diff line
@@ -81,11 +81,15 @@ struct ion_platform_heap {
 * struct msm_ion_heap - defines an ion heap, as well as additional information
 * relevant to the heap.
 * @dev:	the device structure associated with the heap
 * @debug_show: called when the heap debug file is read to add any heap specific
 *		debug info to output
 * @ion_heap:	ion heap
 *
 */
struct msm_ion_heap {
	struct device *dev;
	int (*debug_show)(struct ion_heap *heap, struct seq_file *s,
			  void *unused);
	struct ion_heap ion_heap;
};

+22 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
#ifndef _MSM_ION_H
#define _MSM_ION_H

#include <linux/bitmap.h>
#include <linux/device.h>
#include <uapi/linux/msm_ion.h>

@@ -13,6 +14,16 @@

struct device *msm_ion_heap_device_by_id(int heap_id);

static inline unsigned int ion_get_flags_num_vm_elems(unsigned int flags)
{
	unsigned long vm_flags = flags & ION_FLAGS_CP_MASK;

	return ((unsigned int)bitmap_weight(&vm_flags, BITS_PER_LONG));
}

int ion_populate_vm_list(unsigned long flags, unsigned int *vm_list,
			 int nelems);

#else

static inline struct device *msm_ion_heap_device_by_id(int heap_id)
@@ -20,5 +31,16 @@ static inline struct device *msm_ion_heap_device_by_id(int heap_id)
	return ERR_PTR(-ENODEV);
}

static inline unsigned int ion_get_flags_num_vm_elems(unsigned int flags)
{
	return 0;
}

static inline int ion_populate_vm_list(unsigned long flags,
				       unsigned int *vm_list, int nelems)
{
	return -EINVAL;
}

#endif /* CONFIG_ION_MSM_HEAPS */
#endif /* _MSM_ION_H */