All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Maxim Levitsky <mlevitsk@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	Pawan Gupta <pawan.kumar.gupta@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Josh Poimboeuf <jpoimboe@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Tony Luck <tony.luck@intel.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	"David S. Miller" <davem@davemloft.net>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"Chang S. Bae" <chang.seok.bae@intel.com>,
	Jane Malalane <jane.malalane@citrix.com>,
	Kees Cook <keescook@chromium.org>,
	Kan Liang <kan.liang@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	"maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)"
	<x86@kernel.org>, Herbert Xu <herbert@gondor.apana.org.au>,
	Jiri Olsa <jolsa@kernel.org>, Mark Rutland <mark.rutland@arm.com>,
	linux-perf-users@vger.kernel.org,
	"open list:CRYPTO API" <linux-crypto@vger.kernel.org>
Subject: Re: [PATCH v2 2/5] x86/cpuid: refactor setup_clear_cpu_cap()/clear_cpu_cap()
Date: Mon, 7 Nov 2022 20:10:42 +0100	[thread overview]
Message-ID: <Y2lYMqLVP+00Rpu5@zn.tnic> (raw)
In-Reply-To: <Y1LGkTXCksqAYLHD@zn.tnic>

On Fri, Oct 21, 2022 at 06:19:29PM +0200, Borislav Petkov wrote:
> On Mon, Jul 18, 2022 at 05:11:20PM +0300, Maxim Levitsky wrote:
> > Currently setup_clear_cpu_cap passes NULL 'struct cpuinfo_x86*'
> > to clear_cpu_cap to indicate that capability should be cleared from boot_cpu_data.
> > 
> > Later that is used in clear_feature to do recursive call to
> > clear_cpu_cap together with clearing the feature bit from 'cpu_caps_cleared'
> > 
> > Remove that code and just call the do_clear_cpu_cap on boot_cpu_data directly
> > from the setup_clear_cpu_cap.
> > 
> > The only functional change this introduces is that now calling clear_cpu_cap
> > explicitly on boot_cpu_data also sets the bits in cpu_caps_cleared,
> > which is the only thing that makes sense anyway.
> > 
> > All callers of both functions were checked for this and fixed.
> 
> Change looks ok. What I can't grok is this sentence: what was checked
> and fixed where?

Ok, I think I know what you mean. That:

git grep -E "clear_cpu_cap.*boot"
arch/x86/events/intel/lbr.c:1599:       clear_cpu_cap(&boot_cpu_data, X86_FEATURE_ARCH_LBR);
arch/x86/kernel/alternative.c:746:              clear_cpu_cap(&boot_cpu_data, X86_FEATURE_UP);

Right, so here's the difference:

When you call setup_clear_cpu_cap(), it basically means, to disable the
cap on *every* CPU. This is done with cpu_caps_cleared which gets ANDed
in in apply_forced_caps().

clear_cpu_cap() clears the bit *only* in the first parameter supplied.

Now, that first parameter can be boot_cpu_data too but then, strictly
speaking, clear_cpu_cap() would really do what you want it to do - to
clear it only in its first param.

If you really want to enforce that bit cleared everywhere, you need to
use the setup_* variant.

So this patch is actually incorrect but I admit, the CPU caps handling
are kinda subtle and probably need cleaning.

Lemme document it so that it is at least clear. Who knows, we might end
up improving it in the process.

:-)

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

  reply	other threads:[~2022-11-07 19:11 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-18 14:11 [PATCH v2 0/5] x86: cpuid: improve support for broken CPUID configurations Maxim Levitsky
2022-07-18 14:11 ` [PATCH v2 1/5] perf/x86/intel/lbr: use setup_clear_cpu_cap instead of clear_cpu_cap Maxim Levitsky
2022-09-19 14:31   ` Borislav Petkov
2022-09-20  8:20     ` Maxim Levitsky
2022-09-26 13:12       ` Borislav Petkov
2022-09-28 10:49         ` Maxim Levitsky
2022-10-20  8:59           ` Borislav Petkov
2022-10-20  9:05             ` Herbert Xu
2022-10-20 10:21               ` Maxim Levitsky
2022-10-20 11:13                 ` Borislav Petkov
2022-10-22 21:08             ` H. Peter Anvin
2022-11-02 13:40             ` Paolo Bonzini
2022-11-02 14:27               ` Elliott, Robert (Servers)
2022-11-02 16:23                 ` H. Peter Anvin
2022-11-02 18:19                   ` H. Peter Anvin
2022-11-02 19:14                     ` Elliott, Robert (Servers)
2022-11-03 13:26                   ` Paolo Bonzini
2022-11-03 13:30                 ` Paolo Bonzini
2022-10-20 15:17   ` [tip: x86/urgent] perf/x86/intel/lbr: Use setup_clear_cpu_cap() instead of clear_cpu_cap() tip-bot2 for Maxim Levitsky
2022-07-18 14:11 ` [PATCH v2 2/5] x86/cpuid: refactor setup_clear_cpu_cap()/clear_cpu_cap() Maxim Levitsky
2022-10-21 16:19   ` Borislav Petkov
2022-11-07 19:10     ` Borislav Petkov [this message]
2022-11-07 21:57       ` Borislav Petkov
2022-07-18 14:11 ` [PATCH v2 3/5] x86/cpuid: move filter_cpuid_features to cpuid-deps.c Maxim Levitsky
2022-07-18 14:11 ` [PATCH v2 4/5] x86/cpuid: remove 'warn' parameter from filter_cpuid_features Maxim Levitsky
2022-07-18 14:11 ` [PATCH v2 5/5] x86/cpuid: check for dependencies violations in CPUID and attempt to fix them Maxim Levitsky
2022-07-28  7:30 ` [PATCH v2 0/5] x86: cpuid: improve support for broken CPUID configurations Maxim Levitsky
2022-08-01 16:05   ` Maxim Levitsky
2022-08-01 16:31     ` Dave Hansen
2022-08-01 16:41       ` Maxim Levitsky
2022-09-19 13:43     ` Maxim Levitsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y2lYMqLVP+00Rpu5@zn.tnic \
    --to=bp@alien8.de \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=chang.seok.bae@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=hpa@zytor.com \
    --cc=jane.malalane@citrix.com \
    --cc=jolsa@kernel.org \
    --cc=jpoimboe@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=keescook@chromium.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=mlevitsk@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=pawan.kumar.gupta@linux.intel.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.