mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 7d84c1ebf9
			
		
	
	
		7d84c1ebf9
		
	
	
	
	
		
			
			The frequency invariance infrastructure provides the APERF/MPERF samples already. Utilize them for the cpu frequency display in /proc/cpuinfo. The sample is considered valid for 20ms. So for idle or isolated NOHZ full CPUs the function returns 0, which is matching the previous behaviour. This gets rid of the mass IPIs and a delay of 20ms for stabilizing observed by Eric when reading /proc/cpuinfo. Reported-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Paul E. McKenney <paulmck@kernel.org> Link: https://lore.kernel.org/r/20220415161206.875029458@linutronix.de
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			670 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			670 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| #include <linux/cpufreq.h>
 | |
| #include <linux/fs.h>
 | |
| #include <linux/init.h>
 | |
| #include <linux/proc_fs.h>
 | |
| #include <linux/seq_file.h>
 | |
| 
 | |
| extern const struct seq_operations cpuinfo_op;
 | |
| 
 | |
| static int cpuinfo_open(struct inode *inode, struct file *file)
 | |
| {
 | |
| 	return seq_open(file, &cpuinfo_op);
 | |
| }
 | |
| 
 | |
| static const struct proc_ops cpuinfo_proc_ops = {
 | |
| 	.proc_flags	= PROC_ENTRY_PERMANENT,
 | |
| 	.proc_open	= cpuinfo_open,
 | |
| 	.proc_read_iter	= seq_read_iter,
 | |
| 	.proc_lseek	= seq_lseek,
 | |
| 	.proc_release	= seq_release,
 | |
| };
 | |
| 
 | |
| static int __init proc_cpuinfo_init(void)
 | |
| {
 | |
| 	proc_create("cpuinfo", 0, NULL, &cpuinfo_proc_ops);
 | |
| 	return 0;
 | |
| }
 | |
| fs_initcall(proc_cpuinfo_init);
 |