| // SPDX-License-Identifier: GPL-2.0 | 
 | /* | 
 |  * IOMMU debugfs core infrastructure | 
 |  * | 
 |  * Copyright (C) 2018 Advanced Micro Devices, Inc. | 
 |  * | 
 |  * Author: Gary R Hook <gary.hook@amd.com> | 
 |  */ | 
 |  | 
 | #include <linux/pci.h> | 
 | #include <linux/iommu.h> | 
 | #include <linux/debugfs.h> | 
 |  | 
 | struct dentry *iommu_debugfs_dir; | 
 | EXPORT_SYMBOL_GPL(iommu_debugfs_dir); | 
 |  | 
 | /** | 
 |  * iommu_debugfs_setup - create the top-level iommu directory in debugfs | 
 |  * | 
 |  * Provide base enablement for using debugfs to expose internal data of an | 
 |  * IOMMU driver. When called, this function creates the | 
 |  * /sys/kernel/debug/iommu directory. | 
 |  * | 
 |  * Emit a strong warning at boot time to indicate that this feature is | 
 |  * enabled. | 
 |  * | 
 |  * This function is called from iommu_init; drivers may then use | 
 |  * iommu_debugfs_dir to instantiate a vendor-specific directory to be used | 
 |  * to expose internal data. | 
 |  */ | 
 | void iommu_debugfs_setup(void) | 
 | { | 
 | 	if (!iommu_debugfs_dir) { | 
 | 		iommu_debugfs_dir = debugfs_create_dir("iommu", NULL); | 
 | 		pr_warn("\n"); | 
 | 		pr_warn("*************************************************************\n"); | 
 | 		pr_warn("**     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **\n"); | 
 | 		pr_warn("**                                                         **\n"); | 
 | 		pr_warn("**  IOMMU DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL  **\n"); | 
 | 		pr_warn("**                                                         **\n"); | 
 | 		pr_warn("** This means that this kernel is built to expose internal **\n"); | 
 | 		pr_warn("** IOMMU data structures, which may compromise security on **\n"); | 
 | 		pr_warn("** your system.                                            **\n"); | 
 | 		pr_warn("**                                                         **\n"); | 
 | 		pr_warn("** If you see this message and you are not debugging the   **\n"); | 
 | 		pr_warn("** kernel, report this immediately to your vendor!         **\n"); | 
 | 		pr_warn("**                                                         **\n"); | 
 | 		pr_warn("**     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE    **\n"); | 
 | 		pr_warn("*************************************************************\n"); | 
 | 	} | 
 | } |