public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: linux-kernel@vger.kernel.org, x86@kernel.org
Cc: lists@nerdbynature.de, mikelley@microsoft.com,
	torvalds@linux-foundation.org, Juergen Gross <jgross@suse.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>
Subject: [PATCH v2 6/8] x86/mtrr: don't let mtrr_type_lookup() return MTRR_TYPE_INVALID
Date: Thu,  9 Feb 2023 08:22:18 +0100	[thread overview]
Message-ID: <20230209072220.6836-7-jgross@suse.com> (raw)
In-Reply-To: <20230209072220.6836-1-jgross@suse.com>

mtrr_type_lookup() should always return a valid memory type. In case
there is no information available, it should return the default UC.
At the same time the mtrr_type_lookup() stub for the !CONFIG_MTRR
case should set uniform to 1, as if the memory range would be
covered by no MTRR at all.

In the CONFIG_MTRR case make sure uniform is always set to either 0
or 1. Without mtrr_state_set set it to 0, as it isn't known yet whether
the covered range is uniform or not (in fact there is currently no
caller interested in the uniform value before mtrr_state_set is being
set). With MTRRs disabled uniform can be set to 1.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- always set uniform
- set uniform to 1 in case of disabled MTRRs (Linus Torvalds)
---
 arch/x86/include/asm/mtrr.h        |  7 +++++--
 arch/x86/kernel/cpu/mtrr/generic.c | 12 ++++++++----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/mtrr.h b/arch/x86/include/asm/mtrr.h
index 0b8f51d683dc..f362c33e3d74 100644
--- a/arch/x86/include/asm/mtrr.h
+++ b/arch/x86/include/asm/mtrr.h
@@ -53,9 +53,12 @@ void mtrr_generic_set_state(void);
 static inline u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform)
 {
 	/*
-	 * Return no-MTRRs:
+	 * Return the default MTRR type, without any known other types in
+	 * that range.
 	 */
-	return MTRR_TYPE_INVALID;
+	*uniform = 1;
+
+	return MTRR_TYPE_UNCACHABLE;
 }
 #define mtrr_save_fixed_ranges(arg) do {} while (0)
 #define mtrr_save_state() do {} while (0)
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
index 788bc16888a5..afb59ff2cc00 100644
--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -299,11 +299,15 @@ u8 mtrr_type_lookup(u64 start, u64 end, u8 *uniform)
 	/* Make end inclusive instead of exclusive */
 	end--;
 
-	if (!mtrr_state_set)
-		return MTRR_TYPE_INVALID;
+	if (!mtrr_state_set) {
+		*uniform = 0;	/* Uniformity is unknown. */
+		return MTRR_TYPE_UNCACHABLE;
+	}
 
-	if (!(mtrr_state.enabled & MTRR_STATE_MTRR_ENABLED))
-		return MTRR_TYPE_INVALID;
+	if (!(mtrr_state.enabled & MTRR_STATE_MTRR_ENABLED)) {
+		*uniform = 1;
+		return MTRR_TYPE_UNCACHABLE;
+	}
 
 	/*
 	 * Look up the fixed ranges first, which take priority over
-- 
2.35.3


  parent reply	other threads:[~2023-02-09  7:23 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-09  7:22 [PATCH v2 0/8] x86/mtrr: fix handling with PAT but without MTRR Juergen Gross
2023-02-09  7:22 ` [PATCH v2 1/8] x86/mtrr: split off physical address size calculation Juergen Gross
2023-02-11 10:08   ` Borislav Petkov
2023-02-13  6:19     ` Juergen Gross
2023-02-09  7:22 ` [PATCH v2 2/8] x86/mtrr: support setting MTRR state for software defined MTRRs Juergen Gross
2023-02-13  1:07   ` Michael Kelley (LINUX)
2023-02-13  6:27     ` Juergen Gross
2023-02-13  6:43       ` Michael Kelley (LINUX)
2023-02-13 11:39   ` Borislav Petkov
2023-02-13 14:07     ` Juergen Gross
2023-02-13 15:03       ` Borislav Petkov
2023-02-13 15:11         ` Borislav Petkov
2023-02-13 15:18           ` Juergen Gross
2023-02-13 15:40             ` Borislav Petkov
2023-02-13 15:44               ` Juergen Gross
2023-02-13 18:53                 ` Borislav Petkov
2023-02-14  7:04                   ` Juergen Gross
2023-02-14  8:58                     ` Borislav Petkov
2023-02-14  9:02                       ` Juergen Gross
2023-02-14  9:10                         ` Borislav Petkov
2023-02-14  9:17                           ` Juergen Gross
2023-02-14  9:32                             ` Borislav Petkov
2023-02-13 15:27           ` Dave Hansen
2023-02-13 15:38             ` Juergen Gross
2023-02-13 15:36         ` Juergen Gross
2023-02-13 18:43           ` Borislav Petkov
2023-02-14  7:01             ` Juergen Gross
2023-02-14  0:45       ` Kirill A. Shutemov
2023-02-16  9:32     ` Juergen Gross
2023-02-16 11:02       ` Jeremi Piotrowski
2023-02-16 11:25       ` Borislav Petkov
2023-02-16 12:19         ` Juergen Gross
2023-02-16 12:29           ` Borislav Petkov
2023-02-16 16:04             ` Michael Kelley (LINUX)
2023-02-16 11:07     ` Jeremi Piotrowski
2023-02-16 11:27       ` Borislav Petkov
2023-02-09  7:22 ` [PATCH v2 3/8] x86/hyperv: set MTRR state when running as SEV-SNP Hyper-V guest Juergen Gross
2023-02-13  1:07   ` Michael Kelley (LINUX)
2023-02-13  6:28     ` Juergen Gross
2023-02-09  7:22 ` [PATCH v2 4/8] x86/xen: set MTRR state when running as Xen PV initial domain Juergen Gross
2023-02-09  7:22 ` [PATCH v2 5/8] x86/mtrr: revert commit 90b926e68f50 Juergen Gross
2023-02-10 18:59   ` Linux regression tracking (Thorsten Leemhuis)
2023-02-13  6:07     ` Juergen Gross
2023-02-13 11:46       ` Christian Kujau
2023-02-13 16:23         ` Juergen Gross
2023-02-13 17:01           ` Michael Kelley (LINUX)
2023-02-13 17:24             ` Juergen Gross
2023-02-13 22:54           ` Christian Kujau
2023-02-14  7:13             ` Juergen Gross
2023-02-09  7:22 ` Juergen Gross [this message]
2023-02-09  7:22 ` [PATCH v2 7/8] x86/mm: only check uniform after calling mtrr_type_lookup() Juergen Gross
2023-02-11  0:06   ` Edgecombe, Rick P
2023-02-13  6:08     ` Juergen Gross
2023-02-13  1:08   ` Michael Kelley (LINUX)
2023-02-13  6:35     ` Juergen Gross
2023-02-15 13:40     ` Juergen Gross
2023-02-15 19:38       ` Michael Kelley (LINUX)
2023-02-16  5:22         ` Juergen Gross
2023-02-09  7:22 ` [PATCH v2 8/8] x86/mtrr: drop sanity check in mtrr_type_lookup_fixed() Juergen Gross
2023-02-11  0:06 ` [PATCH v2 0/8] x86/mtrr: fix handling with PAT but without MTRR Edgecombe, Rick P
2023-02-13  6:12   ` Juergen Gross
2023-02-13 18:21     ` Edgecombe, Rick P
2023-02-15  8:25       ` Juergen Gross
2023-02-15 23:22         ` Linus Torvalds
2023-02-16  5:35           ` Juergen Gross

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=20230209072220.6836-7-jgross@suse.com \
    --to=jgross@suse.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lists@nerdbynature.de \
    --cc=mikelley@microsoft.com \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox