From: Peter Zijlstra <peterz@infradead.org>
To: "StDenis, Tom" <Tom.StDenis@amd.com>
Cc: "Koenig, Christian" <Christian.Koenig@amd.com>,
"dave.hansen@intel.com" <dave.hansen@intel.com>,
"luto@kernel.org" <luto@kernel.org>,
"x86@kernel.org" <x86@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Deucher, Alexander" <Alexander.Deucher@amd.com>
Subject: Re: [PATCH 0/4] x86/mm/cpa: Fix cpa-array TLB invalidation
Date: Mon, 3 Dec 2018 16:41:02 +0100 [thread overview]
Message-ID: <20181203154102.GI11614@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <8ee4e546-4680-e463-23ac-64489a60b946@amd.com>
On Fri, Nov 30, 2018 at 04:19:46PM +0000, StDenis, Tom wrote:
> NAK I get a failure in TTM on init with your x86/mm branch (see attached
> dmesg).
So the good news is that with some additional self-tests I can trivially
reproduce this. The bad news is that an otherwise straight forward
cleanup seems to make CPA horribly mad at me.
And since we're somewhat late in the release cycle, I suppose we should
do the simple thing first, and then I can try and figure out this CPA
mess later.
So how about this relatively simple partial revert to sort the problem.
---
Subject: x86/mm/cpa: Fix cpa_flush_array() TLB invalidation
In commit:
a7295fd53c39 ("x86/mm/cpa: Use flush_tlb_kernel_range()")
I misread the cpa array code and incorrectly used
tlb_flush_kernel_range(), resulting in missing TLB flushes and
consequent failures.
Instead do a full invalidate in this case -- for now.
Fixes: a7295fd53c39 ("x86/mm/cpa: Use flush_tlb_kernel_range()")
Reported-by: "StDenis, Tom" <Tom.StDenis@amd.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/x86/mm/pageattr.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index bac35001d896..61bc7d1800d7 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -285,20 +285,16 @@ static void cpa_flush_all(unsigned long cache)
on_each_cpu(__cpa_flush_all, (void *) cache, 1);
}
-static bool __cpa_flush_range(unsigned long start, int numpages, int cache)
+static bool __inv_flush_all(int cache)
{
BUG_ON(irqs_disabled() && !early_boot_irqs_disabled);
- WARN_ON(PAGE_ALIGN(start) != start);
-
if (cache && !static_cpu_has(X86_FEATURE_CLFLUSH)) {
cpa_flush_all(cache);
return true;
}
- flush_tlb_kernel_range(start, start + PAGE_SIZE * numpages);
-
- return !cache;
+ return false;
}
static void cpa_flush_range(unsigned long start, int numpages, int cache)
@@ -306,7 +302,14 @@ static void cpa_flush_range(unsigned long start, int numpages, int cache)
unsigned int i, level;
unsigned long addr;
- if (__cpa_flush_range(start, numpages, cache))
+ WARN_ON(PAGE_ALIGN(start) != start);
+
+ if (__inv_flush_all(cache))
+ return;
+
+ flush_tlb_kernel_range(start, start + PAGE_SIZE * numpages);
+
+ if (!cache)
return;
/*
@@ -332,7 +335,12 @@ static void cpa_flush_array(unsigned long baddr, unsigned long *start,
{
unsigned int i, level;
- if (__cpa_flush_range(baddr, numpages, cache))
+ if (__inv_flush_all(cache))
+ return;
+
+ flush_tlb_all();
+
+ if (!cache)
return;
/*
next prev parent reply other threads:[~2018-12-03 15:41 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-30 13:44 Peter Zijlstra
2018-11-30 13:44 ` [PATCH 1/4] x86/mm/cpa: Add __cpa_addr() helper Peter Zijlstra
2018-11-30 13:44 ` [PATCH 2/4] x86/mm/cpa: Fix cpa_flush_array() Peter Zijlstra
2018-11-30 17:43 ` Dave Hansen
2018-11-30 13:44 ` [PATCH 3/4] x86/mm/cpa: Fold cpa_flush_range() and cpa_flush_array() Peter Zijlstra
2018-11-30 13:44 ` [PATCH 4/4] x86/mm/cpa: Better use clflushopt Peter Zijlstra
2018-11-30 14:52 ` [PATCH 0/4] x86/mm/cpa: Fix cpa-array TLB invalidation StDenis, Tom
[not found] ` <BN6PR12MB180942F2C841FD138A046569F7D30@BN6PR12MB1809.namprd12.prod.outlook.com>
2018-11-30 15:08 ` StDenis, Tom
2018-11-30 15:09 ` Peter Zijlstra
2018-11-30 15:10 ` StDenis, Tom
2018-11-30 15:14 ` StDenis, Tom
2018-11-30 15:23 ` Peter Zijlstra
2018-11-30 15:27 ` StDenis, Tom
2018-11-30 17:50 ` Peter Zijlstra
2018-11-30 15:31 ` Peter Zijlstra
2018-11-30 16:19 ` StDenis, Tom
2018-11-30 17:48 ` Peter Zijlstra
2018-11-30 17:49 ` StDenis, Tom
2018-11-30 18:06 ` Peter Zijlstra
2018-12-03 15:41 ` Peter Zijlstra [this message]
2018-12-03 19:26 ` StDenis, Tom
2018-12-05 16:24 ` StDenis, Tom
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=20181203154102.GI11614@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=Alexander.Deucher@amd.com \
--cc=Christian.Koenig@amd.com \
--cc=Tom.StDenis@amd.com \
--cc=dave.hansen@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.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
Powered by JetHome