|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 5/9] x86/mtrr: use memory_type_changed() in hvm_set_mem_pinned_cacheattr()
The current logic partially open-codes memory_type_changed(), but doesn't
check whether the type change or the cache flush is actually needed.
Instead switch to using memory_type_changed(), at possibly a higher expense
cost of not exclusively issuing cache flushes when limiting cacheability.
However using memory_type_changed() has the benefit of limiting
recalculations and cache flushes to strictly only when it's meaningful due
to the guest configuration, like having devices or IO regions assigned.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
xen/arch/x86/hvm/mtrr.c | 22 +++-------------------
1 file changed, 3 insertions(+), 19 deletions(-)
diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c
index 797f2ae7fd3a..b88e81eb44b1 100644
--- a/xen/arch/x86/hvm/mtrr.c
+++ b/xen/arch/x86/hvm/mtrr.c
@@ -605,22 +605,8 @@ int hvm_set_mem_pinned_cacheattr(struct domain *d,
uint64_t gfn_start,
type = range->type;
call_rcu(&range->rcu, free_pinned_cacheattr_entry);
- p2m_memory_type_changed(d);
- switch ( type )
- {
- case X86_MT_UCM:
- /*
- * For EPT we can also avoid the flush in this case;
- * see epte_get_entry_emt().
- */
- if ( hap_enabled(d) && cpu_has_vmx )
- case X86_MT_UC:
- break;
- /* fall through */
- default:
- flush_all(FLUSH_CACHE);
- break;
- }
+ memory_type_changed(d);
+
return 0;
}
domain_unlock(d);
@@ -682,9 +668,7 @@ int hvm_set_mem_pinned_cacheattr(struct domain *d, uint64_t
gfn_start,
xfree(newr);
- p2m_memory_type_changed(d);
- if ( type != X86_MT_WB )
- flush_all(FLUSH_CACHE);
+ memory_type_changed(d);
return rc;
}
--
2.48.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |