summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMukesh Rathor <mukesh.rathor@oracle.com>2014-01-03 09:48:08 -0500
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2014-01-06 10:44:07 -0500
commit76bcceff0bfbded075c9703ec5413a9bf50ef8c4 (patch)
tree16d35e4624e64c79fc6132678ff93ca66f061b1e
parent4e44e44b0bd25bc4ed23232f06fc7275f1e4e38d (diff)
downloadblackbird-op-linux-76bcceff0bfbded075c9703ec5413a9bf50ef8c4.tar.gz
blackbird-op-linux-76bcceff0bfbded075c9703ec5413a9bf50ef8c4.zip
xen/pvh/mmu: Use PV TLB instead of native.
We also optimize one - the TLB flush. The native operation would needlessly IPI offline VCPUs causing extra wakeups. Using the Xen one avoids that and lets the hypervisor determine which VCPU needs the TLB flush. Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-rw-r--r--arch/x86/xen/mmu.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 490ddb354590..c1d406f35523 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -2222,6 +2222,15 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
void __init xen_init_mmu_ops(void)
{
x86_init.paging.pagetable_init = xen_pagetable_init;
+
+ /* Optimization - we can use the HVM one but it has no idea which
+ * VCPUs are descheduled - which means that it will needlessly IPI
+ * them. Xen knows so let it do the job.
+ */
+ if (xen_feature(XENFEAT_auto_translated_physmap)) {
+ pv_mmu_ops.flush_tlb_others = xen_flush_tlb_others;
+ return;
+ }
pv_mmu_ops = xen_mmu_ops;
memset(dummy_mapping, 0xff, PAGE_SIZE);
OpenPOWER on IntegriCloud