mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
iommu: Refactor IOMMU pagetable page accounting into a config option
Refactor IOMMU pagetable page accounting code into a config option so that it only includes additional headers in configurations where the page accounting feature is needed. Doing so prevents the definition of certain structures from being expanded, which can affect the CRC value generated for exported symbols in module.symvers. Change-Id: Idd6fc0e1cbb46ace211971ac142be491d0a5ab09 Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
This commit is contained in:
parent
09ea649182
commit
f759692d36
2 changed files with 47 additions and 28 deletions
|
|
@ -172,6 +172,15 @@ config IOMMU_DEBUGFS
|
|||
debug/iommu directory, and then populate a subdirectory with
|
||||
entries as required.
|
||||
|
||||
config IO_PGTABLE_PAGE_ACCOUNTING
|
||||
bool "Export the number of pages allocated for IOMMU pagetables"
|
||||
depends on IOMMU_DEBUGFS && QGKI
|
||||
help
|
||||
Allows exposure of the number of pages allocated for IOMMU
|
||||
pagetables through DebugFS. This is particularly useful for
|
||||
generating stats about the amount of memory consumed by IOMMU
|
||||
page tables in the system. If unsure, say N here.
|
||||
|
||||
config IOMMU_DEFAULT_PASSTHROUGH
|
||||
bool "IOMMU passthrough by default"
|
||||
depends on IOMMU_API
|
||||
|
|
|
|||
|
|
@ -11,10 +11,12 @@
|
|||
#include <linux/io-pgtable.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#ifdef CONFIG_IO_PGTABLE_PAGE_ACCOUNTING
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/module.h>
|
||||
#endif
|
||||
|
||||
static const struct io_pgtable_init_fns *
|
||||
io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = {
|
||||
|
|
@ -33,8 +35,6 @@ io_pgtable_init_table[IO_PGTABLE_NUM_FMTS] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static struct dentry *io_pgtable_top;
|
||||
|
||||
struct io_pgtable_ops *alloc_io_pgtable_ops(enum io_pgtable_fmt fmt,
|
||||
struct io_pgtable_cfg *cfg,
|
||||
void *cookie)
|
||||
|
|
@ -78,8 +78,42 @@ void free_io_pgtable_ops(struct io_pgtable_ops *ops)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(free_io_pgtable_ops);
|
||||
|
||||
#ifdef CONFIG_IO_PGTABLE_PAGE_ACCOUNTING
|
||||
static struct dentry *io_pgtable_top;
|
||||
static atomic_t pages_allocated;
|
||||
|
||||
static int io_pgtable_init(void)
|
||||
{
|
||||
io_pgtable_top = debugfs_create_dir("io-pgtable", iommu_debugfs_top);
|
||||
if (!io_pgtable_top)
|
||||
return -ENODEV;
|
||||
|
||||
if (!debugfs_create_atomic_t("pages", 0600, io_pgtable_top,
|
||||
&pages_allocated)) {
|
||||
debugfs_remove_recursive(io_pgtable_top);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(io_pgtable_init);
|
||||
|
||||
static void io_pgtable_exit(void)
|
||||
{
|
||||
debugfs_remove_recursive(io_pgtable_top);
|
||||
}
|
||||
module_exit(io_pgtable_exit);
|
||||
|
||||
static void mod_pages_allocated(int nr_pages)
|
||||
{
|
||||
atomic_add(nr_pages, &pages_allocated);
|
||||
}
|
||||
#else
|
||||
static void mod_pages_allocated(int nr_pages)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void *io_pgtable_alloc_pages_exact(struct io_pgtable_cfg *cfg, void *cookie,
|
||||
size_t size, gfp_t gfp_mask)
|
||||
{
|
||||
|
|
@ -92,7 +126,7 @@ void *io_pgtable_alloc_pages_exact(struct io_pgtable_cfg *cfg, void *cookie,
|
|||
ret = alloc_pages_exact(size, gfp_mask);
|
||||
|
||||
if (likely(ret))
|
||||
atomic_add(1 << get_order(size), &pages_allocated);
|
||||
mod_pages_allocated(1 << get_order(size));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -107,29 +141,5 @@ void io_pgtable_free_pages_exact(struct io_pgtable_cfg *cfg, void *cookie,
|
|||
else
|
||||
free_pages_exact(virt, size);
|
||||
|
||||
atomic_sub(1 << get_order(size), &pages_allocated);
|
||||
mod_pages_allocated(-(1 << get_order(size)));
|
||||
}
|
||||
|
||||
static int io_pgtable_init(void)
|
||||
{
|
||||
io_pgtable_top = debugfs_create_dir("io-pgtable", iommu_debugfs_top);
|
||||
|
||||
if (!io_pgtable_top)
|
||||
return -ENODEV;
|
||||
|
||||
if (!debugfs_create_atomic_t("pages", 0600,
|
||||
io_pgtable_top, &pages_allocated)) {
|
||||
debugfs_remove_recursive(io_pgtable_top);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void io_pgtable_exit(void)
|
||||
{
|
||||
debugfs_remove_recursive(io_pgtable_top);
|
||||
}
|
||||
|
||||
module_init(io_pgtable_init);
|
||||
module_exit(io_pgtable_exit);
|
||||
|
|
|
|||
Loading…
Reference in a new issue