diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86/kernel/cpu/cpuid-deps.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-deps.c index c21f22d836ad..904b0a3c4e53 100644 --- a/arch/x86/kernel/cpu/cpuid-deps.c +++ b/arch/x86/kernel/cpu/cpuid-deps.c | |||
| @@ -62,23 +62,19 @@ const static struct cpuid_dep cpuid_deps[] = { | |||
| 62 | {} | 62 | {} |
| 63 | }; | 63 | }; |
| 64 | 64 | ||
| 65 | static inline void __clear_cpu_cap(struct cpuinfo_x86 *c, unsigned int bit) | ||
| 66 | { | ||
| 67 | clear_bit32(bit, c->x86_capability); | ||
| 68 | } | ||
| 69 | |||
| 70 | static inline void __setup_clear_cpu_cap(unsigned int bit) | ||
| 71 | { | ||
| 72 | clear_cpu_cap(&boot_cpu_data, bit); | ||
| 73 | set_bit32(bit, cpu_caps_cleared); | ||
| 74 | } | ||
| 75 | |||
| 76 | static inline void clear_feature(struct cpuinfo_x86 *c, unsigned int feature) | 65 | static inline void clear_feature(struct cpuinfo_x86 *c, unsigned int feature) |
| 77 | { | 66 | { |
| 78 | if (!c) | 67 | /* |
| 79 | __setup_clear_cpu_cap(feature); | 68 | * Note: This could use the non atomic __*_bit() variants, but the |
| 80 | else | 69 | * rest of the cpufeature code uses atomics as well, so keep it for |
| 81 | __clear_cpu_cap(c, feature); | 70 | * consistency. Cleanup all of it separately. |
| 71 | */ | ||
| 72 | if (!c) { | ||
| 73 | clear_cpu_cap(&boot_cpu_data, feature); | ||
| 74 | set_bit(feature, (unsigned long *)cpu_caps_cleared); | ||
| 75 | } else { | ||
| 76 | clear_bit(feature, (unsigned long *)c->x86_capability); | ||
| 77 | } | ||
| 82 | } | 78 | } |
| 83 | 79 | ||
| 84 | /* Take the capabilities and the BUG bits into account */ | 80 | /* Take the capabilities and the BUG bits into account */ |
