|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/mm: re-arrange type check around _get_page_type()'s TLB flush
commit 8eb15275cd5d945acbc0f70a358255dea94117cf
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Aug 15 08:53:11 2022 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Aug 15 08:53:11 2022 +0200
x86/mm: re-arrange type check around _get_page_type()'s TLB flush
Checks dependent on only d and x can be pulled out, thus allowing to
skip the flush mask calculation.
(Also-)Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/mm.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 40e132b9ba..db1817b691 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -3020,7 +3020,10 @@ static int _get_page_type(struct page_info *page,
unsigned long type,
if ( d && shadow_mode_enabled(d) )
shadow_prepare_page_type_change(d, page);
- if ( (x & PGT_type_mask) != type )
+ if ( (x & PGT_type_mask) != type &&
+ /* Shadow mode: track only writable pages. */
+ (!shadow_mode_enabled(d) ||
+ ((x & PGT_type_mask) == PGT_writable_page)) )
{
/*
* On type change we check to flush stale TLB entries. It is
@@ -3035,10 +3038,7 @@ static int _get_page_type(struct page_info *page,
unsigned long type,
/* Don't flush if the timestamp is old enough */
tlbflush_filter(mask, page->tlbflush_timestamp);
- if ( unlikely(!cpumask_empty(mask)) &&
- /* Shadow mode: track only writable pages. */
- (!shadow_mode_enabled(d) ||
- ((x & PGT_type_mask) == PGT_writable_page)) )
+ if ( unlikely(!cpumask_empty(mask)) )
{
perfc_incr(need_flush_tlb_flush);
/*
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |