diff options
author | Dmitry Adamushko <dmitry.adamushko@gmail.com> | 2008-09-23 16:56:35 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-09-24 04:32:37 -0400 |
commit | 2f9284e4e3be7b0b4d8d0638f9805603069a762d (patch) | |
tree | 7d47a26674a5120cc930c4fcea5bfead7b79c28b /arch | |
parent | e6aa0f07cb5e81a7cbeaf3be6e2101234c2f0d30 (diff) |
x86, microcode_amd: cleanup, mark request_microcode_user() as unsupported
(1) mark mc_size in generic_load_microcode() as unitialized_var to avoid
gcc's (false) warning;
(2) mark request_microcode_user() as unsupported. The required changes
can be added later. Note, we don't break any user-space interfaces
here, as there were no kernels with support for AMD-specific ucode
update yet. The ucode has to be updated via 'firmware'.
Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/microcode_amd.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c index 829415208ff8..7a1f8eeac2c7 100644 --- a/arch/x86/kernel/microcode_amd.c +++ b/arch/x86/kernel/microcode_amd.c | |||
@@ -120,29 +120,7 @@ static int get_matching_microcode(int cpu, void *mc, int rev) | |||
120 | unsigned int equiv_cpu_id = 0x00; | 120 | unsigned int equiv_cpu_id = 0x00; |
121 | unsigned int i = 0; | 121 | unsigned int i = 0; |
122 | 122 | ||
123 | /* | ||
124 | * FIXME! dimm: do we need this? Why an update via /dev/... is different | ||
125 | * from the one via firmware? | ||
126 | * | ||
127 | * This is a tricky part. We might be called from a write operation | ||
128 | * to the device file instead of the usual process of firmware | ||
129 | * loading. This routine needs to be able to distinguish both | ||
130 | * cases. This is done by checking if there alread is a equivalent | ||
131 | * CPU table installed. If not, we're written through | ||
132 | * /dev/cpu/microcode. | ||
133 | * Since we ignore all checks. The error case in which going through | ||
134 | * firmware loading and that table is not loaded has already been | ||
135 | * checked earlier. | ||
136 | */ | ||
137 | BUG_ON(equiv_cpu_table == NULL); | 123 | BUG_ON(equiv_cpu_table == NULL); |
138 | #if 0 | ||
139 | if (equiv_cpu_table == NULL) { | ||
140 | printk(KERN_INFO "microcode: CPU%d microcode update with " | ||
141 | "version 0x%x (current=0x%x)\n", | ||
142 | cpu, mc_header->patch_id, uci->cpu_sig.rev); | ||
143 | goto out; | ||
144 | } | ||
145 | #endif | ||
146 | current_cpu_id = cpuid_eax(0x00000001); | 124 | current_cpu_id = cpuid_eax(0x00000001); |
147 | 125 | ||
148 | while (equiv_cpu_table[i].installed_cpu != 0) { | 126 | while (equiv_cpu_table[i].installed_cpu != 0) { |
@@ -362,7 +340,7 @@ static int generic_load_microcode(int cpu, void *data, size_t size, | |||
362 | leftover = size - offset; | 340 | leftover = size - offset; |
363 | 341 | ||
364 | while (leftover) { | 342 | while (leftover) { |
365 | unsigned int mc_size; | 343 | unsigned int uninitialized_var(mc_size); |
366 | struct microcode_header_amd *mc_header; | 344 | struct microcode_header_amd *mc_header; |
367 | 345 | ||
368 | mc = get_next_ucode(ucode_ptr, leftover, get_ucode_data, &mc_size); | 346 | mc = get_next_ucode(ucode_ptr, leftover, get_ucode_data, &mc_size); |
@@ -428,17 +406,11 @@ static int request_microcode_fw(int cpu, struct device *device) | |||
428 | return ret; | 406 | return ret; |
429 | } | 407 | } |
430 | 408 | ||
431 | static int get_ucode_user(void *to, const void *from, size_t n) | ||
432 | { | ||
433 | return copy_from_user(to, from, n); | ||
434 | } | ||
435 | |||
436 | static int request_microcode_user(int cpu, const void __user *buf, size_t size) | 409 | static int request_microcode_user(int cpu, const void __user *buf, size_t size) |
437 | { | 410 | { |
438 | /* We should bind the task to the CPU */ | 411 | printk(KERN_WARNING "microcode: AMD microcode update via /dev/cpu/microcode" |
439 | BUG_ON(cpu != raw_smp_processor_id()); | 412 | "is not supported\n"); |
440 | 413 | return -1; | |
441 | return generic_load_microcode(cpu, (void*)buf, size, &get_ucode_user); | ||
442 | } | 414 | } |
443 | 415 | ||
444 | static void microcode_fini_cpu_amd(int cpu) | 416 | static void microcode_fini_cpu_amd(int cpu) |