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 <robin.mur...@arm.com>

> Signed-off-by: Zhen Lei <thunder.leiz...@huawei.com>
> ---
>  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;
> 

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to