xref: /linux/drivers/iommu/iommu-debugfs.c (revision bd628c1bed7902ec1f24ba0fe70758949146abbe)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * IOMMU debugfs core infrastructure
4  *
5  * Copyright (C) 2018 Advanced Micro Devices, Inc.
6  *
7  * Author: Gary R Hook <gary.hook@amd.com>
8  */
9 
10 #include <linux/pci.h>
11 #include <linux/iommu.h>
12 #include <linux/debugfs.h>
13 
14 struct dentry *iommu_debugfs_dir;
15 
16 /**
17  * iommu_debugfs_setup - create the top-level iommu directory in debugfs
18  *
19  * Provide base enablement for using debugfs to expose internal data of an
20  * IOMMU driver. When called, this function creates the
21  * /sys/kernel/debug/iommu directory.
22  *
23  * Emit a strong warning at boot time to indicate that this feature is
24  * enabled.
25  *
26  * This function is called from iommu_init; drivers may then call
27  * iommu_debugfs_new_driver_dir() to instantiate a vendor-specific
28  * directory to be used to expose internal data.
29  */
30 void iommu_debugfs_setup(void)
31 {
32 	if (!iommu_debugfs_dir) {
33 		iommu_debugfs_dir = debugfs_create_dir("iommu", NULL);
34 		pr_warn("\n");
35 		pr_warn("*************************************************************\n");
36 		pr_warn("**     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **\n");
37 		pr_warn("**                                                         **\n");
38 		pr_warn("**  IOMMU DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL  **\n");
39 		pr_warn("**                                                         **\n");
40 		pr_warn("** This means that this kernel is built to expose internal **\n");
41 		pr_warn("** IOMMU data structures, which may compromise security on **\n");
42 		pr_warn("** your system.                                            **\n");
43 		pr_warn("**                                                         **\n");
44 		pr_warn("** If you see this message and you are not debugging the   **\n");
45 		pr_warn("** kernel, report this immediately to your vendor!         **\n");
46 		pr_warn("**                                                         **\n");
47 		pr_warn("**     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **\n");
48 		pr_warn("*************************************************************\n");
49 	}
50 }
51 
52 /**
53  * iommu_debugfs_new_driver_dir - create a vendor directory under debugfs/iommu
54  * @vendor: name of the vendor-specific subdirectory to create
55  *
56  * This function is called by an IOMMU driver to create the top-level debugfs
57  * directory for that driver.
58  *
59  * Return: upon success, a pointer to the dentry for the new directory.
60  *         NULL in case of failure.
61  */
62 struct dentry *iommu_debugfs_new_driver_dir(const char *vendor)
63 {
64 	return debugfs_create_dir(vendor, iommu_debugfs_dir);
65 }
66 EXPORT_SYMBOL_GPL(iommu_debugfs_new_driver_dir);
67