Hi Andrew,
now I have implemented the big get_user_pages rewrite. All the
patches apply to 2.4.46 so far.
Description of each patch (all called page_walk_api-2.5.46-XX):
01 - Implements the page walk api, staying as compatible, as
possible to the user users. Introduces get_one_user_page()
for the purpose, that the name suggests.
The page iterator is called walk_user_pages().
get_one_user_page() expects find_extend_vma() to be called first.
This is necessary or at least a nice optimization anyway in
all its callers.
Doesn't work with CONFIG_HUGETLB_PAGE and warns about that.
(02 removes that).
Introduces OBSOLETE_PAGE_WALKER and some mess to catch
callers of get_user_pages, which need to collect vmas.
(05 removes that).
Also demonstrate its benefits in make_pages_present().
02 - Implements a new follow_hugetlb_page() for i386,ia64,sparc64.
Caveat: spin_lock(&mm->page_table_lock) is taken in this
function, which wasn't needed before.
Some contention analysis is welcome!
03 - Use the new function from 02 and support huge tlb pages now, too.
04 - Sprinkle the get_one_user_page() where only one page is needed.
05 - This patch requires the aio fix, which I sent out earlier
today[1]. fs/aio.c called get_user_pages() with a wrong argument,
causing buffer overflow and scribble on kernel memory.
Here get_user_pages() is reduced by the last argument ("vmas"),
because no remaining callers used it.
I also sprinkled comments about optimizing with the new
page walker API, where apropriate.
All in all, I still need to implement the reason for all this:
A scatterlist page walker.
This will be done, if this stuff is accepted, because it
makes no sense without it.
The attached patchset supersedes the one I sent as page_walk_api[2].
Comments are very welcome.
Regards
Ingo Oeser
[1] Ben might post it together with his next AIO update, so
linux-kernel please stay tuned. On linux-mm it has been
posted.
[2] <20021104144937.H659@nightmaster.csn.tu-chemnitz.de>
-- Science is what we can tell a computer. Art is everything else. --- D.E.Knuth
This archive was generated by hypermail 2b29 : Thu Nov 07 2002 - 22:00:47 EST