* Andy Lutomirski luto@kernel.org wrote:
What I'd really like to see is an entirely different API. Maybe:
typedef struct { opaque, but probably includes: int depth; /* 0 is root */ void *table; } ptbl_ptr;
ptbl_ptr root_table = mm_root_ptbl(mm);
set_ptbl_entry(root_table, pa, prot);
/* walk tables */ ptbl_ptr pt = ...; ptentry_ptr entry; while (ptbl_has_children(pt)) { pt = pt_next(pt, addr); } entry = pt_entry_at(pt, addr); /* do something with entry */
etc.
Now someone can add a sixth level without changing every code path in the kernel that touches page tables.
Iteration based page table lookups would be neat.
A sixth level is unavoidable on x86-64 I think - we'll get there in a decade or so? The sixth level will also use up the last ~8 bits of virtual memory available on 64-bit.
Thanks,
Ingo