Merge "iommu: Remove iommu_debugfs_top"

This commit is contained in:
qctecmdr 2020-07-02 22:14:46 -07:00 • committed by Gerrit - the friendly Code Review server
commit 5267e2c6f8
6 changed files with 48 additions and 35 deletions

View file

@ -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

View file

@ -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_dir);
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);

View file

@ -2347,8 +2347,7 @@ err:
static int iommu_debug_init_tests(void)
{
debugfs_tests_dir = debugfs_create_dir("tests",
iommu_debugfs_top);
debugfs_tests_dir = debugfs_create_dir("tests", iommu_debugfs_dir);
if (!debugfs_tests_dir) {
pr_err_ratelimited("Couldn't create iommu/tests debugfs directory\n");
return -ENODEV;

View file

@ -32,7 +32,6 @@ void iommu_debugfs_setup(void)
{
if (!iommu_debugfs_dir) {
iommu_debugfs_dir = debugfs_create_dir("iommu", NULL);
iommu_debugfs_top = iommu_debugfs_dir;
pr_warn("\n");
pr_warn("*************************************************************\n");
pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");

View file

@ -20,7 +20,6 @@
#include <linux/err.h>
#include <linux/pci.h>
#include <linux/bitops.h>
#include <linux/debugfs.h>
#include <linux/property.h>
#include <linux/fsl/mc.h>
#include <linux/module.h>
@ -2162,8 +2161,6 @@ int report_iommu_fault(struct iommu_domain *domain, struct device *dev,
}
EXPORT_SYMBOL_GPL(report_iommu_fault);
struct dentry *iommu_debugfs_top;
static int __init iommu_init(void)
{
iommu_group_kset = kset_create_and_add("iommu_groups",

View file

@ -227,7 +227,6 @@ struct iommu_resv_region {
enum iommu_resv_type type;
};
extern struct dentry *iommu_debugfs_top;
/* Per device IOMMU features */
enum iommu_dev_features {
IOMMU_DEV_FEAT_AUX, /* Aux-domain feature */