On Thu, 2006-03-09 at 14:51 +0100, Gerhard Pircher wrote: > Hi, > > I'm trying to implement non-coherent DMA for PPC desktop systems (like the > AmigaOne with G3/G4 CPU). For this I want to use the code in > arch/ppc/kernel/dma-mapping.c. The DMA memory allocation function > implemented in this file allocates pages with alloc_pages() and maps them to > its own linear address space, but without unmapping the allocated pages from > the kernel linear addressing. Due to this the pages are mapped twice, which > results in a conflict between the different WIMG settings of the pages. > > Is there an API that can be used to unmap the allocated pages from the > kernel linear addressing? I thought about using kunmap() and > flush_all_zero_pkmaps(), but I'm not sure if this is the right approach and > HIGHMEM doesn't work on the AmigaOne too (the highmem base is occupied by > the PCI/ISA I/O space!). Wouldn't it be possible to just clear the valid (V) > bit of the PTE and do a TLB cache flush?
The main problem is that the mappings may be covered by a BAT and thus pages may not be unmappable individually... What I would suggest is that your dig in the low level RAM mapping code and limit it at boot to RAM minus a pool of the size you want. Ben. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

