From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mukesh Rathor Subject: Re: Huge perf degradation from missing xen_tlb_flush_all Date: Fri, 26 Oct 2012 17:02:31 -0700 Message-ID: <20121026170231.31ad2ab8@mantra.us.oracle.com> References: <20121026154311.46607f20@mantra.us.oracle.com> <20121026225813.GJ2708@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20121026225813.GJ2708@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Konrad Rzeszutek Wilk Cc: "Xen-devel@lists.xensource.com" , david.vrabel@citrix.com List-Id: xen-devel@lists.xenproject.org On Fri, 26 Oct 2012 18:58:13 -0400 Konrad Rzeszutek Wilk wrote: > On Fri, Oct 26, 2012 at 03:43:11PM -0700, Mukesh Rathor wrote: > > Hi, > > > Like this I presume (not compile tested): > diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c > index 6226c99..dd91c3c 100644 > --- a/arch/x86/xen/mmu.c > +++ b/arch/x86/xen/mmu.c > @@ -1288,6 +1288,23 @@ unsigned long xen_read_cr2_direct(void) > return this_cpu_read(xen_vcpu_info.arch.cr2); > } > > +void xen_flush_tbl_all(void) > +{ > + struct mmuext_op *op; > + struct multicall_space mcs; > + > + preempt_disable(); > + > + mcs = xen_mc_entry(sizeof(*op)); > + > + op = mcs.args; > + op->cmd = MMUEXT_TLB_FLUSH_ALL; > + MULTI_mmuext_op(mcs.mc, op, 1, NULL, DOMID_SELF); > + > + xen_mc_issue(PARAVIRT_LAZY_MMU); > + > + preempt_enable(); > +} > static void xen_flush_tlb(void) > { > struct mmuext_op *op; > @@ -2518,7 +2535,7 @@ int xen_remap_domain_mfn_range(struct > vm_area_struct *vma, err = 0; > out: > > - flush_tlb_all(); > + xen_flush_tbl_all(); We should examine other places flush_tlb_all() is called from too.