mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 13:11:14 +00:00
mm: cma: debugfs interface
I've noticed that there is no interfaces exposed by CMA which would let me fuzz what's going on in there. This small patchset exposes some information out to userspace, plus adds the ability to trigger allocation and freeing from userspace. This patch (of 3): Implement a simple debugfs interface to expose information about CMA areas in the system. Useful for testing/sanity checks for CMA since it was impossible to previously retrieve this information in userspace. Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Acked-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Laura Abbott <lauraa@codeaurora.org> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
19c07d5e04
commit
28b24c1fc8
5 changed files with 90 additions and 14 deletions
60
mm/cma_debug.c
Normal file
60
mm/cma_debug.c
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* CMA DebugFS Interface
|
||||
*
|
||||
* Copyright (c) 2015 Sasha Levin <sasha.levin@oracle.com>
|
||||
*/
|
||||
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/cma.h>
|
||||
|
||||
#include "cma.h"
|
||||
|
||||
static struct dentry *cma_debugfs_root;
|
||||
|
||||
static int cma_debugfs_get(void *data, u64 *val)
|
||||
{
|
||||
unsigned long *p = data;
|
||||
|
||||
*val = *p;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_SIMPLE_ATTRIBUTE(cma_debugfs_fops, cma_debugfs_get, NULL, "%llu\n");
|
||||
|
||||
static void cma_debugfs_add_one(struct cma *cma, int idx)
|
||||
{
|
||||
struct dentry *tmp;
|
||||
char name[16];
|
||||
int u32s;
|
||||
|
||||
sprintf(name, "cma-%d", idx);
|
||||
|
||||
tmp = debugfs_create_dir(name, cma_debugfs_root);
|
||||
|
||||
debugfs_create_file("base_pfn", S_IRUGO, tmp,
|
||||
&cma->base_pfn, &cma_debugfs_fops);
|
||||
debugfs_create_file("count", S_IRUGO, tmp,
|
||||
&cma->count, &cma_debugfs_fops);
|
||||
debugfs_create_file("order_per_bit", S_IRUGO, tmp,
|
||||
&cma->order_per_bit, &cma_debugfs_fops);
|
||||
|
||||
u32s = DIV_ROUND_UP(cma_bitmap_maxno(cma), BITS_PER_BYTE * sizeof(u32));
|
||||
debugfs_create_u32_array("bitmap", S_IRUGO, tmp, (u32*)cma->bitmap, u32s);
|
||||
}
|
||||
|
||||
static int __init cma_debugfs_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
cma_debugfs_root = debugfs_create_dir("cma", NULL);
|
||||
if (!cma_debugfs_root)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < cma_area_count; i++)
|
||||
cma_debugfs_add_one(&cma_areas[i], i);
|
||||
|
||||
return 0;
|
||||
}
|
||||
late_initcall(cma_debugfs_init);
|
Loading…
Add table
Add a link
Reference in a new issue