Messages in this thread Patch in this message | | | Subject | Re: [PATCH 1/2] x86: Track minimum microcode revision globally v2 | From | Peter Zijlstra <> | Date | Wed, 13 Jun 2012 10:49:52 +0200 |
| |
On Tue, 2012-06-12 at 14:25 -0700, Andi Kleen wrote: > +void update_min_microcode(struct cpuinfo_x86 *c) > +{ > + int i; > + > + for_each_online_cpu (i)
Superfluous whitespace
> + if (cpu_data(i).microcode < c->microcode) > + return;
That needs {}
> + if (boot_cpu_data.microcode != c->microcode) { > + boot_cpu_data.microcode = c->microcode; > + pr_info("Minimum microcode revision updated to %x\n", c->microcode); > + } > +} > +EXPORT_SYMBOL_GPL(update_min_microcode); > + > /* > * cpu_init() initializes state that is per-CPU. Some data is already > * initialized (naturally) in the bootstrap process, such as the GDT
> diff --git a/arch/x86/kernel/microcode_amd.c b/arch/x86/kernel/microcode_amd.c > index 8a2ce8f..b589c7a 100644 > --- a/arch/x86/kernel/microcode_amd.c > +++ b/arch/x86/kernel/microcode_amd.c > @@ -215,6 +215,7 @@ static int apply_microcode_amd(int cpu) > pr_info("CPU%d: new patch_level=0x%08x\n", cpu, rev); > uci->cpu_sig.rev = rev; > c->microcode = rev; > + update_min_microcode(c); > > return 0; > } > diff --git a/arch/x86/kernel/microcode_intel.c b/arch/x86/kernel/microcode_intel.c > index 0327e2b..50afbb9 100644 > --- a/arch/x86/kernel/microcode_intel.c > +++ b/arch/x86/kernel/microcode_intel.c > @@ -326,6 +326,7 @@ static int apply_microcode(int cpu) > uci->cpu_sig.rev = val[1]; > c->microcode = val[1]; > > + update_min_microcode(c); > return 0; > }
Doing it here means doing the for_each_cpu thing with preempt/irqs disabled, that's not funny.
Also this is still a O(n^2) proposition.. so how is this better than the notifier thing I had?
We should just kill reload_store() dead, and do a notifier per system update, that gives sane semantics and avoids all the O(n^2) nonsense.
| |