Re: [PATCH] x86/oprofile/ppro: Do not use __this_cpu* accessors in preemptible context

Fengguang Wu <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.oprofile
Message-ID <[email protected]>
On Tue, Nov 07, 2017 at 06:53:07PM +0100, Borislav Petkov wrote:
>On Tue, Nov 07, 2017 at 08:43:40AM -0800, Linus Torvalds wrote:
>> So I'm adding Borislav to the cc just to maybe annoy him into sending
>> in a patch for this thing too..
>
>/me runs away like the wind!
>
>> This is the famous "you touched it last, tag you're it" model of
>> kernel maintainership.
>
>Oh great, like I don't have enough crappy code to maintain already.
>
>And besides, I'm sure Robert would've addressed it eventually, once he
>moves his head up from Cavium-land. Oh well, it is simple enough, lemme
>take care of it. :-)
>
>Fengguang, please run it to confirm.

Yes it fixed the problem!

Tested-by: Fengguang Wu <[email protected]>

Thanks,
Fengguang

>Thx.
>
>---
>From: Borislav Petkov <[email protected]>
>Subject: [PATCH] x86/oprofile/ppro: Do not use __this_cpu* accessors in preemptible context
>
>The warning below says it all. And we should not have used those
>accessors in the first place: it is PPro so no mixed silicon revisions
>and thus can simply use boot_cpu_data.
>
>  BUG: using __this_cpu_read() in preemptible [00000000] code: swapper/0/1
>  caller is __this_cpu_preempt_check
>  CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.14.0-rc8 #4
>  Call Trace:
>   dump_stack
>   check_preemption_disabled
>   ? do_early_param
>   __this_cpu_preempt_check
>   arch_perfmon_init
>   op_nmi_init
>   ? alloc_pci_root_info
>   oprofile_arch_init
>   oprofile_init
>   do_one_initcall
>   ...
>
>Reported-by: Fengguang Wu <[email protected]>
>Signed-off-by: Borislav Petkov <[email protected]>
>Fix-creation-mandated-by: Linus Torvalds <[email protected]>
>Cc: Robert Richter <[email protected]>
>Cc: [email protected]
>---
> arch/x86/oprofile/op_model_ppro.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
>diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
>index 350f7096baac..1c3b400b05ce 100644
>--- a/arch/x86/oprofile/op_model_ppro.c
>+++ b/arch/x86/oprofile/op_model_ppro.c
>@@ -212,8 +212,9 @@ static void arch_perfmon_setup_counters(void)
> 	eax.full = cpuid_eax(0xa);
>
> 	/* Workaround for BIOS bugs in 6/15. Taken from perfmon2 */
>-	if (eax.split.version_id == 0 && __this_cpu_read(cpu_info.x86) == 6 &&
>-		__this_cpu_read(cpu_info.x86_model) == 15) {
>+	if (eax.split.version_id == 0 &&
>+	    boot_cpu_data.x86 == 6 &&
>+	    boot_cpu_data.x86_model == 15) {
> 		eax.split.version_id = 2;
> 		eax.split.num_counters = 2;
> 		eax.split.bit_width = 40;
>-- 
>2.13.0
>
>SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)
>-- 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.