From: Borislav Petkov <bp@suse.de>
To: Toshi Kani <toshi.kani@hpe.com>
Cc: mingo@kernel.org, hpa@zytor.com, tglx@linutronix.de,
mcgrof@suse.com, jgross@suse.com, paul.gortmaker@windriver.com,
konrad.wilk@oracle.com, elliott@hpe.com, x86@kernel.org,
xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/6] x86/mm/pat: Add pat_disable() interface
Date: Tue, 22 Mar 2016 17:59:44 +0100 [thread overview]
Message-ID: <20160322165944.GC5656@pd.tnic> (raw)
In-Reply-To: <1458175619-32206-1-git-send-email-toshi.kani@hpe.com>
On Wed, Mar 16, 2016 at 06:46:55PM -0600, Toshi Kani wrote:
> In preparation to fix a regression caused by 'commit 9cd25aac1f44
> ("x86/mm/pat: Emulate PAT when it is disabled")', PAT needs to
> provide an interface that disables the OS to initialize PAT MSR.
prevents the OS from initializing the PAT MSR.
>
> PAT MSR initialization must be done on all CPUs with the specific
s/with/using/
> sequence of operations defined in Intel SDM. This requires MTRR
^
the
s/MTRR/MTRRs/
> to be enabled since pat_init() is called as part of MTRR init
> from mtrr_rendezvous_handler().
>
> Change pat_disable() as the interface to disable the OS to initialize
> PAT MSR, and set PAT table with pat_keep_handoff_state(). This
> interface can be called when PAT initialization may not be performed.
This paragraph reads funky and I can't really parse what it is trying to
say.
> This also assures that pat_disable() called from pat_bsp_init()
> to set PAT table properly when CPU does not support PAT.
>
> Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
> Cc: Borislav Petkov <bp@suse.de>
> Cc: Luis R. Rodriguez <mcgrof@suse.com>
> Cc: Juergen Gross <jgross@suse.com>
> Cc: Robert Elliott <elliott@hpe.com>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> ---
> arch/x86/include/asm/pat.h | 1 +
> arch/x86/mm/pat.c | 21 ++++++++++++++++++---
> 2 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/include/asm/pat.h b/arch/x86/include/asm/pat.h
> index ca6c228..016142b 100644
> --- a/arch/x86/include/asm/pat.h
> +++ b/arch/x86/include/asm/pat.h
> @@ -5,6 +5,7 @@
> #include <asm/pgtable_types.h>
>
> bool pat_enabled(void);
> +void pat_disable(const char *reason);
> extern void pat_init(void);
> void pat_init_cache_modes(u64);
>
> diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
> index e0a34b0..48d1619 100644
> --- a/arch/x86/mm/pat.c
> +++ b/arch/x86/mm/pat.c
> @@ -40,11 +40,26 @@
> static bool boot_cpu_done;
>
> static int __read_mostly __pat_enabled = IS_ENABLED(CONFIG_X86_PAT);
> +static void pat_keep_handoff_state(void);
>
> -static inline void pat_disable(const char *reason)
> +/**
> + * pat_disable() - Disable the OS to initialize PAT MSR
^^^^
Err, what? The function name can't be more clear.
> + *
> + * This function disables the OS to initialize PAT MSR, and calls
"prevents the OS from initializing the PAT MSR..."
> + * pat_keep_handoff_state() to set PAT table to the handoff state.
We can see what is calls. You're explaining *what* the code does instead
of *why* again.
> + */
> +void pat_disable(const char *reason)
> {
Why aren't you checking __pat_enabled here?
if (!__pat_enabled)
return;
You can save yourself the other guards in that function, especially that
pr_err() below.
> + if (boot_cpu_done) {
> + pr_err("x86/PAT: PAT cannot be disabled after initialization "
> + "(attempting: %s)\n", reason);
Please integrate checkpatch.pl into your patch creation workflow as it
sometimes has valid complaints:
WARNING: quoted string split across lines
#79: FILE: arch/x86/mm/pat.c:55:
+ pr_err("x86/PAT: PAT cannot be disabled after initialization "
+ "(attempting: %s)\n", reason);
More to the point: why do we need that pr_err() call? What is that
supposed to tell the user?
I think it is more for the programmer to catch wrong use of
pat_disable() and then it should be WARN_ONCE() or so...
> + return;
> + }
> +
> __pat_enabled = 0;
> pr_info("x86/PAT: %s\n", reason);
> +
> + pat_keep_handoff_state();
> }
>
> static int __init nopat(char *str)
> @@ -202,7 +217,7 @@ static void pat_bsp_init(u64 pat)
> {
> u64 tmp_pat;
>
> - if (!cpu_has_pat) {
> + if (!boot_cpu_has(X86_FEATURE_PAT)) {
> pat_disable("PAT not supported by CPU.");
> return;
> }
> @@ -220,7 +235,7 @@ static void pat_bsp_init(u64 pat)
>
> static void pat_ap_init(u64 pat)
> {
> - if (!cpu_has_pat) {
> + if (!boot_cpu_has(X86_FEATURE_PAT)) {
> /*
> * If this happens we are on a secondary CPU, but switched to
> * PAT on the boot CPU. We have no way to undo PAT.
Those last two hunks are unrelated changes and should be a separate
patch.
--
Regards/Gruss,
Boris.
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)
--
next prev parent reply other threads:[~2016-03-22 16:59 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-17 0:46 [PATCH v2 2/6] x86/mm/pat: Add pat_disable() interface Toshi Kani
2016-03-17 0:46 ` Toshi Kani
2016-03-17 0:46 ` [PATCH v2 3/6] x86/mtrr: Fix Xorg crashes in Qemu sessions Toshi Kani
2016-03-17 0:46 ` Toshi Kani
2016-03-22 17:00 ` Borislav Petkov
2016-03-22 21:53 ` Toshi Kani
2016-03-23 8:44 ` Borislav Petkov
2016-03-23 8:44 ` Borislav Petkov
2016-03-23 15:53 ` Toshi Kani
2016-03-23 21:47 ` Toshi Kani
2016-03-23 21:47 ` Toshi Kani
2016-03-23 15:53 ` Toshi Kani
2016-03-22 21:53 ` Toshi Kani
2016-03-22 17:00 ` Borislav Petkov
2016-03-17 0:46 ` [PATCH v2 4/6] x86/mtrr: Fix PAT init handling when MTRR MSR is disabled Toshi Kani
2016-03-17 0:46 ` Toshi Kani
2016-03-22 17:01 ` Borislav Petkov
2016-03-22 22:02 ` Toshi Kani
2016-03-22 22:02 ` Toshi Kani
2016-03-22 17:01 ` Borislav Petkov
2016-03-17 0:46 ` [PATCH v2 5/6] x86/xen, pat: Remove PAT table init code from Xen Toshi Kani
2016-03-17 0:46 ` [PATCH v2 5/6] x86/xen,pat: " Toshi Kani
2016-03-22 17:02 ` [PATCH v2 5/6] x86/xen, pat: " Borislav Petkov
2016-03-22 17:02 ` [PATCH v2 5/6] x86/xen,pat: " Borislav Petkov
2016-03-23 6:08 ` Juergen Gross
2016-03-23 6:08 ` [PATCH v2 5/6] x86/xen, pat: " Juergen Gross
2016-03-17 0:46 ` [PATCH v2 6/6] x86/pat: Document PAT initializations Toshi Kani
2016-03-22 17:02 ` Borislav Petkov
2016-03-22 22:15 ` Toshi Kani
2016-03-22 22:15 ` Toshi Kani
2016-03-22 17:02 ` Borislav Petkov
2016-03-17 0:46 ` Toshi Kani
2016-03-22 16:59 ` [PATCH v2 2/6] x86/mm/pat: Add pat_disable() interface Borislav Petkov
2016-03-22 16:59 ` Borislav Petkov [this message]
2016-03-22 21:40 ` Toshi Kani
2016-03-22 21:40 ` Toshi Kani
2016-03-23 8:51 ` Borislav Petkov
2016-03-23 8:51 ` Borislav Petkov
2016-03-23 15:49 ` Toshi Kani
2016-03-23 15:49 ` Toshi Kani
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=20160322165944.GC5656@pd.tnic \
--to=bp@suse.de \
--cc=elliott@hpe.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@suse.com \
--cc=mingo@kernel.org \
--cc=paul.gortmaker@windriver.com \
--cc=tglx@linutronix.de \
--cc=toshi.kani@hpe.com \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.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.