Messages in this thread | | | Date | Fri, 24 Aug 2012 18:14:51 +0200 | Subject | Re: [PATCH] perf/x86: fix microcode revision check for SNB-PEBS | From | Stephane Eranian <> |
| |
On Fri, Aug 24, 2012 at 6:08 PM, Borislav Petkov <bp@amd64.org> wrote: > On Fri, Aug 24, 2012 at 03:34:34PM +0200, Stephane Eranian wrote: >> >> The following patch, relative to 3.6.0-rc3, makes >> the microcode update code path actually invoke the >> perf_check_microcode() function and thus potentially >> renabling SNB PEBS. >> >> By default, CONFIG_MICROCODE_OLD_INTERFACE is >> forced to Y in arch/x86/Kconfig. There is no >> way to disable this. That means that the code >> path used in arch/x86/kernel/microcode_core.c >> did not include the call to perf_check_microcode(). >> >> Thus, even though the microcode was updated to a >> version that fixes the SNB PEBS problem, perf_event >> would still return EOPNOTSUPP when enabling precise >> sampling. >> >> This patch simply adds a call to perf_check_microcode() >> in the call path used when OLD_INTERFACE=y. > > Ok, so c93dc84cbe324 added calls to perf_check_microcode but it looks > like you're updating the microcode from /dev/cpu/microcode, correct? > > And if so, the old interface got missed. >
So you're saying there is a cmdline tool that can use another interface to pass the ucode to the kernel. I am using the microcode_ctl on Ubuntu 11.04. Apparently that one is still using the old interface. But I may not be the only one in this situation then, so I think it's worth fixing now.
What's the tool to update the ucode using the "new" interface then?
Thanks.
> Oh well, as long as we have to support it, we might as well add that > perf call there - it will go when the interface goes anyway so until > then: > > Acked-by: Borislav Petkov <borislav.petkov@amd.com> > >> >> Signed-off-by: Stephane Eranian <eranian@google.com> >> --- >> >> --- a/arch/x86/kernel/microcode_core.c >> +++ b/arch/x86/kernel/microcode_core.c >> @@ -225,6 +225,9 @@ static ssize_t microcode_write(struct file *file, const char __user *buf, >> if (do_microcode_update(buf, len) == 0) >> ret = (ssize_t)len; >> >> + if (ret > 0) >> + perf_check_microcode(); >> + >> mutex_unlock(µcode_mutex); >> put_online_cpus(); >> >> > > Thanks. > > -- > Regards/Gruss, > Boris. > > Advanced Micro Devices GmbH > Einsteinring 24, 85609 Dornach > GM: Alberto Bozzo > Reg: Dornach, Landkreis Muenchen > HRB Nr. 43632 WEEE Registernr: 129 19551
| |