diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-12-24 23:08:26 +0300 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-12-24 23:08:26 +0300 |
| commit | db8862eafe8a5d030a3b02e81b8bb47447c315e3 (patch) | |
| tree | 073ea7b46809bf804134cbf008a593413c02a99c /arch/x86/kernel/microcode_core.c | |
| parent | c5dee6177f4bd2095aab7d9be9f6ebdddd6deee9 (diff) | |
| parent | c20137fc5329eaf24093fc48c52608dc66be8e5c (diff) | |
| download | linux-db8862eafe8a5d030a3b02e81b8bb47447c315e3.tar.xz | |
Merge branch 'linus' into tracing/hw-branch-tracing
Diffstat (limited to 'arch/x86/kernel/microcode_core.c')
| -rw-r--r-- | arch/x86/kernel/microcode_core.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c index 82fb2809ce32..c4b5b24e0217 100644 --- a/arch/x86/kernel/microcode_core.c +++ b/arch/x86/kernel/microcode_core.c @@ -272,13 +272,18 @@ static struct attribute_group mc_attr_group = { .name = "microcode", }; -static void microcode_fini_cpu(int cpu) +static void __microcode_fini_cpu(int cpu) { struct ucode_cpu_info *uci = ucode_cpu_info + cpu; - mutex_lock(µcode_mutex); microcode_ops->microcode_fini_cpu(cpu); uci->valid = 0; +} + +static void microcode_fini_cpu(int cpu) +{ + mutex_lock(µcode_mutex); + __microcode_fini_cpu(cpu); mutex_unlock(µcode_mutex); } @@ -306,12 +311,16 @@ static int microcode_resume_cpu(int cpu) * to this cpu (a bit of paranoia): */ if (microcode_ops->collect_cpu_info(cpu, &nsig)) { - microcode_fini_cpu(cpu); + __microcode_fini_cpu(cpu); + printk(KERN_ERR "failed to collect_cpu_info for resuming cpu #%d\n", + cpu); return -1; } - if (memcmp(&nsig, &uci->cpu_sig, sizeof(nsig))) { - microcode_fini_cpu(cpu); + if ((nsig.sig != uci->cpu_sig.sig) || (nsig.pf != uci->cpu_sig.pf)) { + __microcode_fini_cpu(cpu); + printk(KERN_ERR "cached ucode doesn't match the resuming cpu #%d\n", + cpu); /* Should we look for a new ucode here? */ return 1; } |
