mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Provide base enablement for using debugfs to expose internal data of an IOMMU driver. When called, create 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, and creates the initial DebugFS directory. Drivers may then call iommu_debugfs_new_driver_dir() to instantiate a device-specific directory to expose internal data. It will return a pointer to the new dentry structure created in /sys/kernel/debug/iommu, or NULL in the event of a failure. Since the IOMMU driver can not be removed from the running system, there is no need for an "off" function. Signed-off-by: Gary R Hook <gary.hook@amd.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// 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;
 | 
						|
 | 
						|
/**
 | 
						|
 * 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 call
 | 
						|
 * iommu_debugfs_new_driver_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");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * iommu_debugfs_new_driver_dir - create a vendor directory under debugfs/iommu
 | 
						|
 * @vendor: name of the vendor-specific subdirectory to create
 | 
						|
 *
 | 
						|
 * This function is called by an IOMMU driver to create the top-level debugfs
 | 
						|
 * directory for that driver.
 | 
						|
 *
 | 
						|
 * Return: upon success, a pointer to the dentry for the new directory.
 | 
						|
 *         NULL in case of failure.
 | 
						|
 */
 | 
						|
struct dentry *iommu_debugfs_new_driver_dir(const char *vendor)
 | 
						|
{
 | 
						|
	return debugfs_create_dir(vendor, iommu_debugfs_dir);
 | 
						|
}
 | 
						|
EXPORT_SYMBOL_GPL(iommu_debugfs_new_driver_dir);
 |