x86/mm/pat: Disambiguate PAT-disabled boot messages
authorIngo Molnar <mingo@kernel.org>
Tue, 19 Nov 2019 08:50:19 +0000 (09:50 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 10 Dec 2019 09:12:55 +0000 (10:12 +0100)
Right now we have these four types of PAT-disabled boot messages:

  x86/PAT: PAT support disabled.
  x86/PAT: PAT MSR is 0, disabled.
  x86/PAT: MTRRs disabled, skipping PAT initialization too.
  x86/PAT: PAT not supported by CPU.

The first message is ambiguous in that it doesn't signal that PAT is off
due to a boot option.

The second message doesn't really make it clear that this is the MSR value
during early bootup and it's the firmware environment that disabled PAT
support.

The fourth message doesn't really make it clear that we disable PAT support
because CONFIG_MTRR is off in the kernel.

Clarify, harmonize and fix the spelling in these user-visible messages:

  x86/PAT: PAT support disabled via boot option.
  x86/PAT: PAT support disabled by the firmware.
  x86/PAT: PAT support disabled because CONFIG_MTRR is disabled in the kernel.
  x86/PAT: PAT not supported by the CPU.

Also add a fifth message, in case PAT support is disabled at build time:

  x86/PAT: PAT support disabled because CONFIG_X86_PAT is disabled in the kernel.

Previously we'd just silently return from pat_init() without giving any indication
that PAT support is off.

Finally, clarify/extend some of the comments related to PAT initialization.

Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/include/asm/mtrr.h
arch/x86/mm/pat.c

index dbff1456d2152a6993ba5f381f6a7ef838b52f28..3337d2233aefc0da733519b877b33b70746c2b2f 100644 (file)
@@ -86,7 +86,7 @@ static inline void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi)
 }
 static inline void mtrr_bp_init(void)
 {
-       pat_disable("MTRRs disabled, skipping PAT initialization too.");
+       pat_disable("PAT support disabled because CONFIG_MTRR is disabled in the kernel.");
 }
 
 #define mtrr_ap_init() do {} while (0)
index 560ac5137a2f41aa9fb616fd4b4842a8dada20aa..e26b81ca5b95684a78eb97ea373c7546fcd76b23 100644 (file)
@@ -66,7 +66,11 @@ static bool __read_mostly pat_disabled = !IS_ENABLED(CONFIG_X86_PAT);
 static bool __read_mostly pat_initialized;
 static bool __read_mostly init_cm_done;
 
-void pat_disable(const char *reason)
+/*
+ * PAT support is enabled by default, but can be disabled for
+ * various user-requested or hardware-forced reasons:
+ */
+void pat_disable(const char *msg_reason)
 {
        if (pat_disabled)
                return;
@@ -77,12 +81,12 @@ void pat_disable(const char *reason)
        }
 
        pat_disabled = true;
-       pr_info("x86/PAT: %s\n", reason);
+       pr_info("x86/PAT: %s\n", msg_reason);
 }
 
 static int __init nopat(char *str)
 {
-       pat_disable("PAT support disabled.");
+       pat_disable("PAT support disabled via boot option.");
        return 0;
 }
 early_param("nopat", nopat);
@@ -238,13 +242,13 @@ static void pat_bsp_init(u64 pat)
        u64 tmp_pat;
 
        if (!boot_cpu_has(X86_FEATURE_PAT)) {
-               pat_disable("PAT not supported by CPU.");
+               pat_disable("PAT not supported by the CPU.");
                return;
        }
 
        rdmsrl(MSR_IA32_CR_PAT, tmp_pat);
        if (!tmp_pat) {
-               pat_disable("PAT MSR is 0, disabled.");
+               pat_disable("PAT support disabled by the firmware.");
                return;
        }
 
@@ -314,7 +318,7 @@ void init_cache_modes(void)
 }
 
 /**
- * pat_init - Initialize PAT MSR and PAT table
+ * pat_init - Initialize the PAT MSR and PAT table on the current CPU
  *
  * This function initializes PAT MSR and PAT table with an OS-defined value
  * to enable additional cache attributes, WC, WT and WP.
@@ -328,6 +332,10 @@ void pat_init(void)
        u64 pat;
        struct cpuinfo_x86 *c = &boot_cpu_data;
 
+#ifndef CONFIG_X86_PAT
+       pr_info_once("x86/PAT: PAT support disabled because CONFIG_X86_PAT is disabled in the kernel.\n");
+#endif
+
        if (pat_disabled)
                return;