* [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).