summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-10-31 12:38:31 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-11-17 13:15:54 -0800
commitda205c80275a7f7a90c2baab423783c55c406878 (patch)
treeca82d03015baada1f76432e5fc4f4a0777ec00e4 /include
parentccd37ab3230af7b32db1a139d9fe95918813bc23 (diff)
downloadlinux-3.10-da205c80275a7f7a90c2baab423783c55c406878.tar.gz
linux-3.10-da205c80275a7f7a90c2baab423783c55c406878.tar.bz2
linux-3.10-da205c80275a7f7a90c2baab423783c55c406878.zip
xen/mmu: Use Xen specific TLB flush instead of the generic one.
commit 95a7d76897c1e7243d4137037c66d15cbf2cce76 upstream. As Mukesh explained it, the MMUEXT_TLB_FLUSH_ALL allows the hypervisor to do a TLB flush on all active vCPUs. If instead we were using the generic one (which ends up being xen_flush_tlb) we end up making the MMUEXT_TLB_FLUSH_LOCAL hypercall. But before we make that hypercall the kernel will IPI all of the vCPUs (even those that were asleep from the hypervisor perspective). The end result is that we needlessly wake them up and do a TLB flush when we can just let the hypervisor do it correctly. This patch gives around 50% speed improvement when migrating idle guest's from one host to another. Oracle-bug: 14630170 Tested-by: Jingjie Jiang <jingjie.jiang@oracle.com> Suggested-by: Mukesh Rathor <mukesh.rathor@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/trace/events/xen.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h
index 92f1a796829..348c4febdcb 100644
--- a/include/trace/events/xen.h
+++ b/include/trace/events/xen.h
@@ -377,6 +377,14 @@ DECLARE_EVENT_CLASS(xen_mmu_pgd,
DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin);
DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin);
+TRACE_EVENT(xen_mmu_flush_tlb_all,
+ TP_PROTO(int x),
+ TP_ARGS(x),
+ TP_STRUCT__entry(__array(char, x, 0)),
+ TP_fast_assign((void)x),
+ TP_printk("%s", "")
+ );
+
TRACE_EVENT(xen_mmu_flush_tlb,
TP_PROTO(int x),
TP_ARGS(x),