mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	powerpc/pseries: Export raw per-CPU VPA data via debugfs
This patch exports the raw per-CPU VPA data via debugfs. A per-CPU file is created which exports the VPA data of that CPU to help debug some of the VPA related issues or to analyze the per-CPU VPA related statistics. v3: Removed offline CPU check. v2: Included offline CPU check and other review comments. Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
		
							parent
							
								
									d2bf793237
								
							
						
					
					
						commit
						c6c26fb55e
					
				| @ -48,6 +48,7 @@ | ||||
| #include <asm/kexec.h> | ||||
| #include <asm/fadump.h> | ||||
| #include <asm/asm-prototypes.h> | ||||
| #include <asm/debugfs.h> | ||||
| 
 | ||||
| #include "pseries.h" | ||||
| 
 | ||||
| @ -1239,3 +1240,56 @@ static int __init reserve_vrma_context_id(void) | ||||
| 	return 0; | ||||
| } | ||||
| machine_device_initcall(pseries, reserve_vrma_context_id); | ||||
| 
 | ||||
| #ifdef CONFIG_DEBUG_FS | ||||
| /* debugfs file interface for vpa data */ | ||||
| static ssize_t vpa_file_read(struct file *filp, char __user *buf, size_t len, | ||||
| 			      loff_t *pos) | ||||
| { | ||||
| 	int cpu = (long)filp->private_data; | ||||
| 	struct lppaca *lppaca = &lppaca_of(cpu); | ||||
| 
 | ||||
| 	return simple_read_from_buffer(buf, len, pos, lppaca, | ||||
| 				sizeof(struct lppaca)); | ||||
| } | ||||
| 
 | ||||
| static const struct file_operations vpa_fops = { | ||||
| 	.open		= simple_open, | ||||
| 	.read		= vpa_file_read, | ||||
| 	.llseek		= default_llseek, | ||||
| }; | ||||
| 
 | ||||
| static int __init vpa_debugfs_init(void) | ||||
| { | ||||
| 	char name[16]; | ||||
| 	long i; | ||||
| 	static struct dentry *vpa_dir; | ||||
| 
 | ||||
| 	if (!firmware_has_feature(FW_FEATURE_SPLPAR)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	vpa_dir = debugfs_create_dir("vpa", powerpc_debugfs_root); | ||||
| 	if (!vpa_dir) { | ||||
| 		pr_warn("%s: can't create vpa root dir\n", __func__); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 
 | ||||
| 	/* set up the per-cpu vpa file*/ | ||||
| 	for_each_possible_cpu(i) { | ||||
| 		struct dentry *d; | ||||
| 
 | ||||
| 		sprintf(name, "cpu-%ld", i); | ||||
| 
 | ||||
| 		d = debugfs_create_file(name, 0400, vpa_dir, (void *)i, | ||||
| 					&vpa_fops); | ||||
| 		if (!d) { | ||||
| 			pr_warn("%s: can't create per-cpu vpa file\n", | ||||
| 					__func__); | ||||
| 			return -ENOMEM; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| machine_arch_initcall(pseries, vpa_debugfs_init); | ||||
| #endif /* CONFIG_DEBUG_FS */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Aravinda Prasad
						Aravinda Prasad