blob: 3af2de6d4e5f5838bed16e77da5e5c167d932869 [file] [log] [blame]
Sasha Levin28b24c12015-04-14 15:44:57 -07001/*
2 * CMA DebugFS Interface
3 *
4 * Copyright (c) 2015 Sasha Levin <sasha.levin@oracle.com>
5 */
6
7
8#include <linux/debugfs.h>
9#include <linux/cma.h>
10
11#include "cma.h"
12
13static struct dentry *cma_debugfs_root;
14
15static int cma_debugfs_get(void *data, u64 *val)
16{
17 unsigned long *p = data;
18
19 *val = *p;
20
21 return 0;
22}
23
24DEFINE_SIMPLE_ATTRIBUTE(cma_debugfs_fops, cma_debugfs_get, NULL, "%llu\n");
25
26static void cma_debugfs_add_one(struct cma *cma, int idx)
27{
28 struct dentry *tmp;
29 char name[16];
30 int u32s;
31
32 sprintf(name, "cma-%d", idx);
33
34 tmp = debugfs_create_dir(name, cma_debugfs_root);
35
36 debugfs_create_file("base_pfn", S_IRUGO, tmp,
37 &cma->base_pfn, &cma_debugfs_fops);
38 debugfs_create_file("count", S_IRUGO, tmp,
39 &cma->count, &cma_debugfs_fops);
40 debugfs_create_file("order_per_bit", S_IRUGO, tmp,
41 &cma->order_per_bit, &cma_debugfs_fops);
42
43 u32s = DIV_ROUND_UP(cma_bitmap_maxno(cma), BITS_PER_BYTE * sizeof(u32));
44 debugfs_create_u32_array("bitmap", S_IRUGO, tmp, (u32*)cma->bitmap, u32s);
45}
46
47static int __init cma_debugfs_init(void)
48{
49 int i;
50
51 cma_debugfs_root = debugfs_create_dir("cma", NULL);
52 if (!cma_debugfs_root)
53 return -ENOMEM;
54
55 for (i = 0; i < cma_area_count; i++)
56 cma_debugfs_add_one(&cma_areas[i], i);
57
58 return 0;
59}
60late_initcall(cma_debugfs_init);