* [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[parent not found: <1346154232-13299-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* [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
[parent not found: <1346154232-13299-4-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* 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
[parent not found: <503D3F18.7070507-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>]
* 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).