> > But if we need a DMA buffer that is physically contiguous can't we
> > just move non-DMA pages around and adjust the page tables such that
> > logical addresses stay the same?
>
> Assuming you know which pages are only accessed using logical
> addresses. We currently have no way of knowing that a page was
> allocated *because* it was DMA-able.
>
> Besides which remapping implies that you would have to relocate
> the page in kernel virtual space (since multi-page allocations
No, we could allocate a certain region in memory (1 MB?) to be
used for buffer/cache/DMA usage only...
Then there's no need to muck with page-table's or whatever...
bye-bye race conditions :)
> > It should be possible to change page tables and let all other references
> > stay the same.
>
> I meant, "references by ptes". If you move a page that is shared
> many times (such as a libc page) you will change a fair few ptes,
> flush a load of tlb entries and bounce quite a few L1/L2 cache
> entries. So remapping has quite a cost and should only be a
> late resort solution (last resort would be to just junk the pages,
> assuming clean, and page them back in when needed).
see above...
grtz,
Rik.
----------
Send Linux memory-management wishes to me: I'm currently looking
for something to hack...