From: dave.martin@linaro.org (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: Mismatched aliases with DMA mappings?
Date: Mon, 8 Oct 2012 11:06:46 +0100 [thread overview]
Message-ID: <20121008100646.GB2302@linaro.org> (raw)
In-Reply-To: <5071290A.6030902@samsung.com>
On Sun, Oct 07, 2012 at 09:02:34AM +0200, Marek Szyprowski wrote:
> Hello,
>
> I'm sorry for very late response but I was busy with other urgent
> items after getting back from holidays.
>
> On 9/24/2012 11:52 AM, Dave Martin wrote:
> >On Sat, Sep 22, 2012 at 02:22:07PM +0900, Kyungmin Park wrote:
>
> >>I just show how CMA addresses mismatched aliases codes.
> >>
> >>In reserve function, it declares the require memory size with base
> >>address. At that time it calles 'dma_contiguous_early_fixup()'. it
> >>just registered address and size.
> >>
> >>void __init dma_contiguous_early_fixup(phys_addr_t base, unsigned long
> >>size)
> >>{
> >> dma_mmu_remap[dma_mmu_remap_num].base = base;
> >> dma_mmu_remap[dma_mmu_remap_num].size = size;
> >> dma_mmu_remap_num++;
> >>}
> >>
> >>These registerd base and size will be remap at dma_contiguous_remap
> >>function at paging_init.
> >>
> >>void __init dma_contiguous_remap(void)
> >>{
> >> int i;
> >> for (i = 0; i < dma_mmu_remap_num; i++) {
> >> phys_addr_t start = dma_mmu_remap[i].base;
> >> phys_addr_t end = start + dma_mmu_remap[i].size;
> >> struct map_desc map;
> >> unsigned long addr;
> >>
> >> if (end > arm_lowmem_limit)
> >> end = arm_lowmem_limit;
> >> if (start >= end)
> >> continue;
> >>
> >> map.pfn = __phys_to_pfn(start);
> >> map.virtual = __phys_to_virt(start);
> >> map.length = end - start;
> >> map.type = MT_MEMORY_DMA_READY;
> >>
> >> /*
> >> * Clear previous low-memory mapping
> >> */
> >> for (addr = __phys_to_virt(start); addr <
> >>__phys_to_virt(end);
> >> addr += PMD_SIZE)
> >> pmd_clear(pmd_off_k(addr));
> >>
> >> iotable_init(&map, 1);
> >> }
> >>}
> >
> >OK, so it looks like this is done early and can't happen after the
> >kernel has booted (?)
>
> Right, the changes in the linear mapping for CMA areas are done very
> early to make sure that the proper mapping will be available for all
> processes in the system (CMA changes the size of the pages used for
> holding low memory linear mappings from 1MiB/2MiB 1-level sections
> to 4KiB pages which require 2 levels of pte). Once the kernel has
> fully started it is not (easily) possible to alter the linear
> mappings.
>
> >Do you know whether the linear alias for DMA memory is removed when
> >not using CMA?
>
> Nope, when standard page_alloc() implementation of dma mapping is
> used there exist 2 mappings for each allocated buffer: one in linear
> low memory kernel mapping (cache'able) and the second created by the
> dma-mapping subsystem (non-cache'able or writecombined). Right now
> no one observed any issues caused by such situation assuming that no
> process is accessing linear cache'able lowmem mappings when dma
> non-cache'able mapping exist.
Thanks, that clarifies my understanding.
Eventually, I decided it was not worth attempting to allocate non-
cacheable memory for my case, and I use normal memory with explicit
maintenance instead. This is a little more cumbersome, but so far
it appears to work.
Cheers
---Dave
prev parent reply other threads:[~2012-10-08 10:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-21 15:21 Mismatched aliases with DMA mappings? Dave Martin
2012-09-22 5:22 ` Kyungmin Park
2012-09-24 9:52 ` Dave Martin
2012-10-07 7:02 ` Marek Szyprowski
2012-10-08 10:06 ` Dave Martin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121008100646.GB2302@linaro.org \
--to=dave.martin@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).