Commit ac72e7888a612dccfbc15b34698aad441bdfda10
Committed by
Ingo Molnar
1 parent
191679fdfa
Exists in
master
and in
4 other branches
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>
Showing 3 changed files with 35 additions and 0 deletions Side-by-side Diff
Documentation/kernel-parameters.txt
... | ... | @@ -416,6 +416,19 @@ |
416 | 416 | [SPARC64] tick |
417 | 417 | [X86-64] hpet,tsc |
418 | 418 | |
419 | + clearcpuid=BITNUM [X86] | |
420 | + Disable CPUID feature X for the kernel. See | |
421 | + include/asm-x86/cpufeature.h for the valid bit numbers. | |
422 | + Note the Linux specific bits are not necessarily | |
423 | + stable over kernel options, but the vendor specific | |
424 | + ones should be. | |
425 | + Also note that user programs calling CPUID directly | |
426 | + or using the feature without checking anything | |
427 | + will still see it. This just prevents it from | |
428 | + being used by the kernel or shown in /proc/cpuinfo. | |
429 | + Also note the kernel might malfunction if you disable | |
430 | + some critical bits. | |
431 | + | |
419 | 432 | code_bytes [IA32/X86_64] How many bytes of object code to print |
420 | 433 | in an oops report. |
421 | 434 | Range: 0 - 8192 |
arch/x86/kernel/cpu/common.c
... | ... | @@ -572,6 +572,17 @@ |
572 | 572 | printk("\n"); |
573 | 573 | } |
574 | 574 | |
575 | +static __init int setup_disablecpuid(char *arg) | |
576 | +{ | |
577 | + int bit; | |
578 | + if (get_option(&arg, &bit) && bit < NCAPINTS*32) | |
579 | + setup_clear_cpu_cap(bit); | |
580 | + else | |
581 | + return 0; | |
582 | + return 1; | |
583 | +} | |
584 | +__setup("clearcpuid=", setup_disablecpuid); | |
585 | + | |
575 | 586 | cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE; |
576 | 587 | |
577 | 588 | /* This is hacky. :) |
arch/x86/kernel/setup_64.c
... | ... | @@ -1050,6 +1050,17 @@ |
1050 | 1050 | printk(KERN_CONT "\n"); |
1051 | 1051 | } |
1052 | 1052 | |
1053 | +static __init int setup_disablecpuid(char *arg) | |
1054 | +{ | |
1055 | + int bit; | |
1056 | + if (get_option(&arg, &bit) && bit < NCAPINTS*32) | |
1057 | + setup_clear_cpu_cap(bit); | |
1058 | + else | |
1059 | + return 0; | |
1060 | + return 1; | |
1061 | +} | |
1062 | +__setup("clearcpuid=", setup_disablecpuid); | |
1063 | + | |
1053 | 1064 | /* |
1054 | 1065 | * Get CPU information for use by the procfs. |
1055 | 1066 | */ |