mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	x86: add generic clearcpuid=... option
Add a generic option to clear any cpuid bit. I added it because it was very easy to add with the new generic cpuid disable bitmap and perhaps it will be useful in the future. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
		
							parent
							
								
									191679fdfa
								
							
						
					
					
						commit
						ac72e7888a
					
				
					 3 changed files with 35 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -416,6 +416,19 @@ and is between 256 and 4096 characters. It is defined in the file
 | 
			
		|||
			[SPARC64] tick
 | 
			
		||||
			[X86-64] hpet,tsc
 | 
			
		||||
 | 
			
		||||
	clearcpuid=BITNUM [X86]
 | 
			
		||||
			Disable CPUID feature X for the kernel. See
 | 
			
		||||
			include/asm-x86/cpufeature.h for the valid bit numbers.
 | 
			
		||||
			Note the Linux specific bits are not necessarily
 | 
			
		||||
			stable over kernel options, but the vendor specific
 | 
			
		||||
			ones should be.
 | 
			
		||||
			Also note that user programs calling CPUID directly
 | 
			
		||||
			or using the feature without checking anything
 | 
			
		||||
			will still see it. This just prevents it from
 | 
			
		||||
			being used by the kernel or shown in /proc/cpuinfo.
 | 
			
		||||
			Also note the kernel might malfunction if you disable
 | 
			
		||||
			some critical bits.
 | 
			
		||||
 | 
			
		||||
	code_bytes	[IA32/X86_64] How many bytes of object code to print
 | 
			
		||||
			in an oops report.
 | 
			
		||||
			Range: 0 - 8192
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -572,6 +572,17 @@ void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 | 
			
		|||
		printk("\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static __init int setup_disablecpuid(char *arg)
 | 
			
		||||
{
 | 
			
		||||
	int bit;
 | 
			
		||||
	if (get_option(&arg, &bit) && bit < NCAPINTS*32)
 | 
			
		||||
		setup_clear_cpu_cap(bit);
 | 
			
		||||
	else
 | 
			
		||||
		return 0;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
__setup("clearcpuid=", setup_disablecpuid);
 | 
			
		||||
 | 
			
		||||
cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
 | 
			
		||||
 | 
			
		||||
/* This is hacky. :)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1050,6 +1050,17 @@ void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 | 
			
		|||
		printk(KERN_CONT "\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static __init int setup_disablecpuid(char *arg)
 | 
			
		||||
{
 | 
			
		||||
	int bit;
 | 
			
		||||
	if (get_option(&arg, &bit) && bit < NCAPINTS*32)
 | 
			
		||||
		setup_clear_cpu_cap(bit);
 | 
			
		||||
	else
 | 
			
		||||
		return 0;
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
__setup("clearcpuid=", setup_disablecpuid);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Get CPU information for use by the procfs.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue