On 05/09/2016 02:27 PM, Andrew Cooper wrote: > paging_invlpg() already returns a boolean indicating whether an invalidation > is necessary or not. A return value of 0 indicates that the specified virtual > address wasn't shadowed (or has already been flushed), cannot currently be > cached in the TLB. > > This is a performance optimisation. > > Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com>
Reviewed-by: Boris Ostrovsky <boris.ostrov...@oracle.com> > --- > CC: Jan Beulich <jbeul...@suse.com> > CC: Tim Deegan <t...@xen.org> > CC: Wei Liu <wei.l...@citrix.com> > CC: Boris Ostrovsky <boris.ostrov...@oracle.com> > CC: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com> > > While being a performance optimisation, the main purpose of splitting this > patch out is to separate the functional change. The following patch performs > some function shuffling, and this patch makes the following one more obviously > correct. > > v2: > * Newly split out > --- > xen/arch/x86/hvm/svm/svm.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c > index 7634c3f..081a5d8 100644 > --- a/xen/arch/x86/hvm/svm/svm.c > +++ b/xen/arch/x86/hvm/svm/svm.c > @@ -2224,8 +2224,8 @@ static void svm_invlpg_intercept(unsigned long vaddr) > { > struct vcpu *curr = current; > HVMTRACE_LONG_2D(INVLPG, 0, TRC_PAR_LONG(vaddr)); > - paging_invlpg(curr, vaddr); > - svm_asid_g_invlpg(curr, vaddr); > + if ( paging_invlpg(curr, vaddr) ) > + svm_asid_g_invlpg(curr, vaddr); > } > > static struct hvm_function_table __initdata svm_function_table = { _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel