Merge tag 'for-linus-5.0-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / iommu / iommu-debugfs.c
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);