if (addr == bad_dma_address)
                goto out;
 
-       if (iommu->need_sync)
+       if (unlikely(iommu->need_sync))
                iommu_completion_wait(iommu);
 
 out:
 
        __unmap_single(iommu, domain->priv, dma_addr, size, dir);
 
-       if (iommu->need_sync)
+       if (unlikely(iommu->need_sync))
                iommu_completion_wait(iommu);
 
        spin_unlock_irqrestore(&domain->lock, flags);
                        goto unmap;
        }
 
-       if (iommu->need_sync)
+       if (unlikely(iommu->need_sync))
                iommu_completion_wait(iommu);
 
 out:
                s->dma_address = s->dma_length = 0;
        }
 
-       if (iommu->need_sync)
+       if (unlikely(iommu->need_sync))
                iommu_completion_wait(iommu);
 
        spin_unlock_irqrestore(&domain->lock, flags);
                goto out;
        }
 
-       if (iommu->need_sync)
+       if (unlikely(iommu->need_sync))
                iommu_completion_wait(iommu);
 
 out:
 
        __unmap_single(iommu, domain->priv, dma_addr, size, DMA_BIDIRECTIONAL);
 
-       if (iommu->need_sync)
+       if (unlikely(iommu->need_sync))
                iommu_completion_wait(iommu);
 
        spin_unlock_irqrestore(&domain->lock, flags);