Commit 83be7d764dc4b860712e392197ec27645f9d74a8
Exists in
master
and in
7 other branches
Merge branch 'x86-cpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-cpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: x86, msr, cpumask: Use struct cpumask rather than the deprecated cpumask_t x86, cpuid: Simplify the code in cpuid_open x86, cpuid: Remove the bkl from cpuid_open() x86, msr: Remove the bkl from msr_open() x86: AMD Geode LX optimizations x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus
Showing 6 changed files Side-by-side Diff
arch/x86/Kconfig.cpu
... | ... | @@ -406,7 +406,7 @@ |
406 | 406 | # generates cmov. |
407 | 407 | config X86_CMOV |
408 | 408 | def_bool y |
409 | - depends on (MK8 || MK7 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM) | |
409 | + depends on (MK8 || MK7 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM || MGEODE_LX) | |
410 | 410 | |
411 | 411 | config X86_MINIMUM_CPU_FAMILY |
412 | 412 | int |
arch/x86/Makefile_32.cpu
... | ... | @@ -41,7 +41,7 @@ |
41 | 41 | |
42 | 42 | # Geode GX1 support |
43 | 43 | cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx |
44 | - | |
44 | +cflags-$(CONFIG_MGEODE_LX) += $(call cc-option,-march=geode,-march=pentium-mmx) | |
45 | 45 | # add at the end to overwrite eventual tuning options from earlier |
46 | 46 | # cpu entries |
47 | 47 | cflags-$(CONFIG_X86_GENERIC) += $(call tune,generic,$(call tune,i686)) |
arch/x86/include/asm/msr.h
... | ... | @@ -247,8 +247,8 @@ |
247 | 247 | #ifdef CONFIG_SMP |
248 | 248 | int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); |
249 | 249 | int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); |
250 | -void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs); | |
251 | -void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs); | |
250 | +void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs); | |
251 | +void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs); | |
252 | 252 | int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); |
253 | 253 | int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); |
254 | 254 | int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]); |
255 | 255 | |
... | ... | @@ -264,12 +264,12 @@ |
264 | 264 | wrmsr(msr_no, l, h); |
265 | 265 | return 0; |
266 | 266 | } |
267 | -static inline void rdmsr_on_cpus(const cpumask_t *m, u32 msr_no, | |
267 | +static inline void rdmsr_on_cpus(const struct cpumask *m, u32 msr_no, | |
268 | 268 | struct msr *msrs) |
269 | 269 | { |
270 | 270 | rdmsr_on_cpu(0, msr_no, &(msrs[0].l), &(msrs[0].h)); |
271 | 271 | } |
272 | -static inline void wrmsr_on_cpus(const cpumask_t *m, u32 msr_no, | |
272 | +static inline void wrmsr_on_cpus(const struct cpumask *m, u32 msr_no, | |
273 | 273 | struct msr *msrs) |
274 | 274 | { |
275 | 275 | wrmsr_on_cpu(0, msr_no, msrs[0].l, msrs[0].h); |
arch/x86/kernel/cpuid.c
... | ... | @@ -116,21 +116,16 @@ |
116 | 116 | { |
117 | 117 | unsigned int cpu; |
118 | 118 | struct cpuinfo_x86 *c; |
119 | - int ret = 0; | |
120 | 119 | |
121 | - lock_kernel(); | |
122 | - | |
123 | 120 | cpu = iminor(file->f_path.dentry->d_inode); |
124 | - if (cpu >= nr_cpu_ids || !cpu_online(cpu)) { | |
125 | - ret = -ENXIO; /* No such CPU */ | |
126 | - goto out; | |
127 | - } | |
121 | + if (cpu >= nr_cpu_ids || !cpu_online(cpu)) | |
122 | + return -ENXIO; /* No such CPU */ | |
123 | + | |
128 | 124 | c = &cpu_data(cpu); |
129 | 125 | if (c->cpuid_level < 0) |
130 | - ret = -EIO; /* CPUID not supported */ | |
131 | -out: | |
132 | - unlock_kernel(); | |
133 | - return ret; | |
126 | + return -EIO; /* CPUID not supported */ | |
127 | + | |
128 | + return 0; | |
134 | 129 | } |
135 | 130 | |
136 | 131 | /* |
arch/x86/kernel/msr.c
... | ... | @@ -174,21 +174,17 @@ |
174 | 174 | { |
175 | 175 | unsigned int cpu = iminor(file->f_path.dentry->d_inode); |
176 | 176 | struct cpuinfo_x86 *c = &cpu_data(cpu); |
177 | - int ret = 0; | |
178 | 177 | |
179 | - lock_kernel(); | |
180 | 178 | cpu = iminor(file->f_path.dentry->d_inode); |
181 | 179 | |
182 | - if (cpu >= nr_cpu_ids || !cpu_online(cpu)) { | |
183 | - ret = -ENXIO; /* No such CPU */ | |
184 | - goto out; | |
185 | - } | |
180 | + if (cpu >= nr_cpu_ids || !cpu_online(cpu)) | |
181 | + return -ENXIO; /* No such CPU */ | |
182 | + | |
186 | 183 | c = &cpu_data(cpu); |
187 | 184 | if (!cpu_has(c, X86_FEATURE_MSR)) |
188 | - ret = -EIO; /* MSR not supported */ | |
189 | -out: | |
190 | - unlock_kernel(); | |
191 | - return ret; | |
185 | + return -EIO; /* MSR not supported */ | |
186 | + | |
187 | + return 0; | |
192 | 188 | } |
193 | 189 | |
194 | 190 | /* |
arch/x86/lib/msr.c
... | ... | @@ -71,14 +71,9 @@ |
71 | 71 | } |
72 | 72 | EXPORT_SYMBOL(wrmsr_on_cpu); |
73 | 73 | |
74 | -/* rdmsr on a bunch of CPUs | |
75 | - * | |
76 | - * @mask: which CPUs | |
77 | - * @msr_no: which MSR | |
78 | - * @msrs: array of MSR values | |
79 | - * | |
80 | - */ | |
81 | -void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs) | |
74 | +static void __rwmsr_on_cpus(const struct cpumask *mask, u32 msr_no, | |
75 | + struct msr *msrs, | |
76 | + void (*msr_func) (void *info)) | |
82 | 77 | { |
83 | 78 | struct msr_info rv; |
84 | 79 | int this_cpu; |
85 | 80 | |
86 | 81 | |
... | ... | @@ -92,11 +87,23 @@ |
92 | 87 | this_cpu = get_cpu(); |
93 | 88 | |
94 | 89 | if (cpumask_test_cpu(this_cpu, mask)) |
95 | - __rdmsr_on_cpu(&rv); | |
90 | + msr_func(&rv); | |
96 | 91 | |
97 | - smp_call_function_many(mask, __rdmsr_on_cpu, &rv, 1); | |
92 | + smp_call_function_many(mask, msr_func, &rv, 1); | |
98 | 93 | put_cpu(); |
99 | 94 | } |
95 | + | |
96 | +/* rdmsr on a bunch of CPUs | |
97 | + * | |
98 | + * @mask: which CPUs | |
99 | + * @msr_no: which MSR | |
100 | + * @msrs: array of MSR values | |
101 | + * | |
102 | + */ | |
103 | +void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs) | |
104 | +{ | |
105 | + __rwmsr_on_cpus(mask, msr_no, msrs, __rdmsr_on_cpu); | |
106 | +} | |
100 | 107 | EXPORT_SYMBOL(rdmsr_on_cpus); |
101 | 108 | |
102 | 109 | /* |
103 | 110 | |
... | ... | @@ -107,24 +114,9 @@ |
107 | 114 | * @msrs: array of MSR values |
108 | 115 | * |
109 | 116 | */ |
110 | -void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs) | |
117 | +void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs) | |
111 | 118 | { |
112 | - struct msr_info rv; | |
113 | - int this_cpu; | |
114 | - | |
115 | - memset(&rv, 0, sizeof(rv)); | |
116 | - | |
117 | - rv.off = cpumask_first(mask); | |
118 | - rv.msrs = msrs; | |
119 | - rv.msr_no = msr_no; | |
120 | - | |
121 | - this_cpu = get_cpu(); | |
122 | - | |
123 | - if (cpumask_test_cpu(this_cpu, mask)) | |
124 | - __wrmsr_on_cpu(&rv); | |
125 | - | |
126 | - smp_call_function_many(mask, __wrmsr_on_cpu, &rv, 1); | |
127 | - put_cpu(); | |
119 | + __rwmsr_on_cpus(mask, msr_no, msrs, __wrmsr_on_cpu); | |
128 | 120 | } |
129 | 121 | EXPORT_SYMBOL(wrmsr_on_cpus); |
130 | 122 |