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