linux-tegra.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] ARM: dma-mapping: Small logical clean up
@ 2012-08-28 11:43 Hiroshi Doyu
       [not found] ` <1346154232-13299-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Hiroshi Doyu @ 2012-08-28 11:43 UTC (permalink / raw)
  To: m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ
  Cc: Hiroshi Doyu, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA

Skip unnecessary operations if order == 0. A little bit easier to
read.

Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 arch/arm/mm/dma-mapping.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 70a6275..aaea5e4 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1032,11 +1032,12 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, gfp_t
 		if (!pages[i])
 			goto error;
 
-		if (order)
+		if (order) {
 			split_page(pages[i], order);
-		j = 1 << order;
-		while (--j)
-			pages[i + j] = pages[i] + j;
+			j = 1 << order;
+			while (--j)
+				pages[i + j] = pages[i] + j;
+		}
 
 		__dma_clear_buffer(pages[i], PAGE_SIZE << order);
 		i += 1 << order;
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/4] ARM: dma-mapping: Remove unsed var at arm_coherent_iommu_unmap_page
       [not found] ` <1346154232-13299-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2012-08-28 11:43   ` Hiroshi Doyu
  2012-08-28 11:43   ` [PATCH 3/4] ARM: dma-mapping: Refrain noisy console message Hiroshi Doyu
  2012-08-28 11:43   ` [PATCH 4/4] ARM: dma-mapping: Skip cache maint for invalid page Hiroshi Doyu
  2 siblings, 0 replies; 6+ messages in thread
From: Hiroshi Doyu @ 2012-08-28 11:43 UTC (permalink / raw)
  To: m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ
  Cc: Hiroshi Doyu, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA

Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 arch/arm/mm/dma-mapping.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index aaea5e4..8cb9542 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1557,7 +1557,6 @@ static void arm_coherent_iommu_unmap_page(struct device *dev, dma_addr_t handle,
 {
 	struct dma_iommu_mapping *mapping = dev->archdata.mapping;
 	dma_addr_t iova = handle & PAGE_MASK;
-	struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
 	int offset = handle & ~PAGE_MASK;
 	int len = PAGE_ALIGN(size + offset);
 
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/4] ARM: dma-mapping: Refrain noisy console message
       [not found] ` <1346154232-13299-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  2012-08-28 11:43   ` [PATCH 2/4] ARM: dma-mapping: Remove unsed var at arm_coherent_iommu_unmap_page Hiroshi Doyu
@ 2012-08-28 11:43   ` Hiroshi Doyu
  2012-08-28 11:43   ` [PATCH 4/4] ARM: dma-mapping: Skip cache maint for invalid page Hiroshi Doyu
  2 siblings, 0 replies; 6+ messages in thread
From: Hiroshi Doyu @ 2012-08-28 11:43 UTC (permalink / raw)
  To: m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ
  Cc: Hiroshi Doyu, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA

With many IOMMU'able devices, console gets noisy.

Tegra30 has a few dozen of IOMMU'able devices.

Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 arch/arm/mm/dma-mapping.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 8cb9542..2621282 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1747,7 +1747,7 @@ int arm_iommu_attach_device(struct device *dev,
 	dev->archdata.mapping = mapping;
 	set_dma_ops(dev, &iommu_ops);
 
-	pr_info("Attached IOMMU controller to %s device.\n", dev_name(dev));
+	pr_debug("Attached IOMMU controller to %s device.\n", dev_name(dev));
 	return 0;
 }
 
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/4] ARM: dma-mapping: Skip cache maint for invalid page
       [not found] ` <1346154232-13299-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  2012-08-28 11:43   ` [PATCH 2/4] ARM: dma-mapping: Remove unsed var at arm_coherent_iommu_unmap_page Hiroshi Doyu
  2012-08-28 11:43   ` [PATCH 3/4] ARM: dma-mapping: Refrain noisy console message Hiroshi Doyu
@ 2012-08-28 11:43   ` Hiroshi Doyu
       [not found]     ` <1346154232-13299-4-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
  2 siblings, 1 reply; 6+ messages in thread
From: Hiroshi Doyu @ 2012-08-28 11:43 UTC (permalink / raw)
  To: m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ
  Cc: Hiroshi Doyu, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA

Skip cache maint for invalid page but warn it.

Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 arch/arm/mm/dma-mapping.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 2621282..0368702 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1589,6 +1589,9 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle,
 	if (!iova)
 		return;
 
+	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
+		return;
+
 	if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
 		__dma_page_dev_to_cpu(page, offset, size, dir);
 
@@ -1607,6 +1610,9 @@ static void arm_iommu_sync_single_for_cpu(struct device *dev,
 	if (!iova)
 		return;
 
+	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
+		return;
+
 	__dma_page_dev_to_cpu(page, offset, size, dir);
 }
 
@@ -1621,6 +1627,9 @@ static void arm_iommu_sync_single_for_device(struct device *dev,
 	if (!iova)
 		return;
 
+	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
+		return;
+
 	__dma_page_cpu_to_dev(page, offset, size, dir);
 }
 
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 4/4] ARM: dma-mapping: Skip cache maint for invalid page
       [not found]     ` <1346154232-13299-4-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2012-08-28 21:58       ` Marek Szyprowski
       [not found]         ` <503D3F18.7070507-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Szyprowski @ 2012-08-28 21:58 UTC (permalink / raw)
  To: Hiroshi Doyu
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA

Hello,

On 8/28/2012 1:43 PM, Hiroshi Doyu wrote:

> Skip cache maint for invalid page but warn it.
>
> Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
>   arch/arm/mm/dma-mapping.c |    9 +++++++++
>   1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index 2621282..0368702 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -1589,6 +1589,9 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle,
>   	if (!iova)
>   		return;
>
> +	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
> +		return;
> +
>   	if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
>   		__dma_page_dev_to_cpu(page, offset, size, dir);
>
> @@ -1607,6 +1610,9 @@ static void arm_iommu_sync_single_for_cpu(struct device *dev,
>   	if (!iova)
>   		return;
>
> +	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
> +		return;
> +
>   	__dma_page_dev_to_cpu(page, offset, size, dir);
>   }
>
> @@ -1621,6 +1627,9 @@ static void arm_iommu_sync_single_for_device(struct device *dev,
>   	if (!iova)
>   		return;
>
> +	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
> +		return;
> +
>   	__dma_page_cpu_to_dev(page, offset, size, dir);
>   }

I really wonder what has happened in your system that you require
such paranoid checks. All of the above functions are called on the
scatter-list which has been first passed to dma_map_sg(). IMHO it
makes much more sense to add a pfn_valid() check in dma_map_sg()
and return error if the provided scatter list is not valid instead
of these WARN_ONs.

Best regards
-- 
Marek Szyprowski
Samsung Poland R&D Center

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 4/4] ARM: dma-mapping: Skip cache maint for invalid page
       [not found]         ` <503D3F18.7070507-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
@ 2012-08-29  4:49           ` Hiroshi Doyu
  0 siblings, 0 replies; 6+ messages in thread
From: Hiroshi Doyu @ 2012-08-29  4:49 UTC (permalink / raw)
  To: m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org
  Cc: linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org

Hi Marek,

Marek Szyprowski <m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> wrote @ Tue, 28 Aug 2012 23:58:48 +0200:

> Hello,
> 
> On 8/28/2012 1:43 PM, Hiroshi Doyu wrote:
> 
> > Skip cache maint for invalid page but warn it.
> >
> > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> > ---
> >   arch/arm/mm/dma-mapping.c |    9 +++++++++
> >   1 files changed, 9 insertions(+), 0 deletions(-)
> >
> > diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> > index 2621282..0368702 100644
> > --- a/arch/arm/mm/dma-mapping.c
> > +++ b/arch/arm/mm/dma-mapping.c
> > @@ -1589,6 +1589,9 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle,
> >   	if (!iova)
> >   		return;
> >
> > +	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
> > +		return;
> > +
> >   	if (!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
> >   		__dma_page_dev_to_cpu(page, offset, size, dir);
> >
> > @@ -1607,6 +1610,9 @@ static void arm_iommu_sync_single_for_cpu(struct device *dev,
> >   	if (!iova)
> >   		return;
> >
> > +	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
> > +		return;
> > +
> >   	__dma_page_dev_to_cpu(page, offset, size, dir);
> >   }
> >
> > @@ -1621,6 +1627,9 @@ static void arm_iommu_sync_single_for_device(struct device *dev,
> >   	if (!iova)
> >   		return;
> >
> > +	if (WARN_ON(!pfn_valid(page_to_pfn(page))))
> > +		return;
> > +
> >   	__dma_page_cpu_to_dev(page, offset, size, dir);
> >   }
> 
> I really wonder what has happened in your system that you require
> such paranoid checks. All of the above functions are called on the
> scatter-list which has been first passed to dma_map_sg(). IMHO it
> makes much more sense to add a pfn_valid() check in dma_map_sg()
> and return error if the provided scatter list is not valid instead
> of these WARN_ONs.

Actually one device driver hit Oops at unmap_page() since this
function could be called directly from device drivers, and
WARN_ON(dump_stack) helped to find out which device driver did
something wrong. IIRC, the following functions can be called directly
from device drivers?

static inline void dma_unmap_page(struct device *dev, dma_addr_t addr,
				  size_t size, enum dma_data_direction dir);
static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr,
					   size_t size,
					   enum dma_data_direction dir);
static inline void dma_sync_single_for_device(struct device *dev,
					      dma_addr_t addr, size_t size,
					      enum dma_data_direction dir);

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-08-29  4:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-28 11:43 [PATCH 1/4] ARM: dma-mapping: Small logical clean up Hiroshi Doyu
     [not found] ` <1346154232-13299-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-08-28 11:43   ` [PATCH 2/4] ARM: dma-mapping: Remove unsed var at arm_coherent_iommu_unmap_page Hiroshi Doyu
2012-08-28 11:43   ` [PATCH 3/4] ARM: dma-mapping: Refrain noisy console message Hiroshi Doyu
2012-08-28 11:43   ` [PATCH 4/4] ARM: dma-mapping: Skip cache maint for invalid page Hiroshi Doyu
     [not found]     ` <1346154232-13299-4-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-08-28 21:58       ` Marek Szyprowski
     [not found]         ` <503D3F18.7070507-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2012-08-29  4:49           ` Hiroshi Doyu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).