From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933008AbdCWMMC (ORCPT ); Thu, 23 Mar 2017 08:12:02 -0400 Received: from foss.arm.com ([217.140.101.70]:55516 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751837AbdCWMMB (ORCPT ); Thu, 23 Mar 2017 08:12:01 -0400 Subject: Re: [PATCH 2/7] iommu/iova: cut down judgement times To: Zhen Lei , Joerg Roedel , iommu , David Woodhouse , Sudeep Dutt , Ashutosh Dixit , linux-kernel References: <1490164067-12552-1-git-send-email-thunder.leizhen@huawei.com> <1490164067-12552-3-git-send-email-thunder.leizhen@huawei.com> Cc: Zefan Li , Xinwei Hu , Tianhong Ding , Hanjun Guo From: Robin Murphy Message-ID: <2884b8d1-72d4-dc41-75c1-92cfa19d77ae@arm.com> Date: Thu, 23 Mar 2017 12:11:56 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <1490164067-12552-3-git-send-email-thunder.leizhen@huawei.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 22/03/17 06:27, Zhen Lei wrote: > Below judgement can only be satisfied at the last time, which produced 2N > judgements(suppose N times failed, 0 or 1 time successed) in vain. > > if ((pfn >= iova->pfn_lo) && (pfn <= iova->pfn_hi)) { > return iova; > } For me, GCC (6.2.1 AArch64) seems to do a pretty good job of this function already, so this change only saves two instructions in total (pfn is compared against pfn_lo only once instead of twice), which I wouldn't expect to see a noticeable performance effect from. Given the improvement in readability, though, I don't even care about any codegen differences :) Reviewed-by: Robin Murphy > Signed-off-by: Zhen Lei > --- > drivers/iommu/iova.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c > index 8ba8b496..1c49969 100644 > --- a/drivers/iommu/iova.c > +++ b/drivers/iommu/iova.c > @@ -312,15 +312,12 @@ private_find_iova(struct iova_domain *iovad, unsigned long pfn) > while (node) { > struct iova *iova = rb_entry(node, struct iova, node); > > - /* If pfn falls within iova's range, return iova */ > - if ((pfn >= iova->pfn_lo) && (pfn <= iova->pfn_hi)) { > - return iova; > - } > - > if (pfn < iova->pfn_lo) > node = node->rb_left; > - else if (pfn > iova->pfn_lo) > + else if (pfn > iova->pfn_hi) > node = node->rb_right; > + else > + return iova; /* pfn falls within iova's range */ > } > > return NULL; >