diff mbox series

iommu/io-pgtable-arm: hide unused ipmmu_iotlb_sync

Message ID 20171011135919.3653302-1-arnd@arndb.de
State New
Headers show
Series iommu/io-pgtable-arm: hide unused ipmmu_iotlb_sync | expand

Commit Message

Arnd Bergmann Oct. 11, 2017, 1:59 p.m. UTC
There are two sets of iommu_ops in this driver, and only
one of them contains a reference to the ipmmu_iotlb_sync
function. This leads to a compiler warning when these
operations are not in use:

drivers/iommu/ipmmu-vmsa.c:622:13: error: 'ipmmu_iotlb_sync' defined but not used [-Werror=unused-function]

We either want to use the function in both operations, or
we should hide it. Without having additional information
which approach is correct, I'm picking the second one here,
which avoids the build error.

Fixes: 32b124492bdf ("iommu/io-pgtable-arm: Convert to IOMMU API TLB sync")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/iommu/ipmmu-vmsa.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

-- 
2.9.0

Comments

Robin Murphy Oct. 11, 2017, 2:16 p.m. UTC | #1
On 11/10/17 14:59, Arnd Bergmann wrote:
> There are two sets of iommu_ops in this driver, and only

> one of them contains a reference to the ipmmu_iotlb_sync

> function. This leads to a compiler warning when these

> operations are not in use:

> 

> drivers/iommu/ipmmu-vmsa.c:622:13: error: 'ipmmu_iotlb_sync' defined but not used [-Werror=unused-function]


Oh bum, I forgot there was still quite so much #ifdef'd under CONFIG_ARM
in this driver :(

> We either want to use the function in both operations, or

> we should hide it. Without having additional information

> which approach is correct, I'm picking the second one here,

> which avoids the build error.


For correctness I think it needs to be the first one, otherwise
iommu_unmap() will wind up missing a sync on 32-bit ARM.

That said, I think the third option is now viable as well, namely to
shuffle some lines and get rid of the almost-duplicated ops entirely.
I'll have a quick go at that shortly.

Robin.

> Fixes: 32b124492bdf ("iommu/io-pgtable-arm: Convert to IOMMU API TLB sync")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  drivers/iommu/ipmmu-vmsa.c | 16 ++++++++--------

>  1 file changed, 8 insertions(+), 8 deletions(-)

> 

> diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c

> index af8140054273..bdd0d0d20925 100644

> --- a/drivers/iommu/ipmmu-vmsa.c

> +++ b/drivers/iommu/ipmmu-vmsa.c

> @@ -619,14 +619,6 @@ static size_t ipmmu_unmap(struct iommu_domain *io_domain, unsigned long iova,

>  	return domain->iop->unmap(domain->iop, iova, size);

>  }

>  

> -static void ipmmu_iotlb_sync(struct iommu_domain *io_domain)

> -{

> -	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);

> -

> -	if (domain->mmu)

> -		ipmmu_tlb_flush_all(domain);

> -}

> -

>  static phys_addr_t ipmmu_iova_to_phys(struct iommu_domain *io_domain,

>  				      dma_addr_t iova)

>  {

> @@ -810,6 +802,14 @@ static void ipmmu_domain_free_dma(struct iommu_domain *io_domain)

>  	}

>  }

>  

> +static void ipmmu_iotlb_sync(struct iommu_domain *io_domain)

> +{

> +	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);

> +

> +	if (domain->mmu)

> +		ipmmu_tlb_flush_all(domain);

> +}

> +

>  static int ipmmu_add_device_dma(struct device *dev)

>  {

>  	struct iommu_group *group;

>
Arnd Bergmann Oct. 11, 2017, 2:39 p.m. UTC | #2
On Wed, Oct 11, 2017 at 4:16 PM, Robin Murphy <robin.murphy@arm.com> wrote:
> On 11/10/17 14:59, Arnd Bergmann wrote:

>

> That said, I think the third option is now viable as well, namely to

> shuffle some lines and get rid of the almost-duplicated ops entirely.

> I'll have a quick go at that shortly.


Ok, thanks!

      Arnd
diff mbox series

Patch

diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
index af8140054273..bdd0d0d20925 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -619,14 +619,6 @@  static size_t ipmmu_unmap(struct iommu_domain *io_domain, unsigned long iova,
 	return domain->iop->unmap(domain->iop, iova, size);
 }
 
-static void ipmmu_iotlb_sync(struct iommu_domain *io_domain)
-{
-	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
-
-	if (domain->mmu)
-		ipmmu_tlb_flush_all(domain);
-}
-
 static phys_addr_t ipmmu_iova_to_phys(struct iommu_domain *io_domain,
 				      dma_addr_t iova)
 {
@@ -810,6 +802,14 @@  static void ipmmu_domain_free_dma(struct iommu_domain *io_domain)
 	}
 }
 
+static void ipmmu_iotlb_sync(struct iommu_domain *io_domain)
+{
+	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
+
+	if (domain->mmu)
+		ipmmu_tlb_flush_all(domain);
+}
+
 static int ipmmu_add_device_dma(struct device *dev)
 {
 	struct iommu_group *group;