On Tue, Aug 06, 2019 at 12:09:38PM -0700, Matthew Wilcox wrote:
> Has anyone looked at turning the interface inside-out?  ie something like:
> 
>       struct mm_walk_state state = { .mm = mm, .start = start, .end = end, };
> 
>       for_each_page_range(&state, page) {
>               ... do something with page ...
>       }
> 
> with appropriate macrology along the lines of:
> 
> #define for_each_page_range(state, page)                              \
>       while ((page = page_range_walk_next(state)))
> 
> Then you don't need to package anything up into structs that are shared
> between the caller and the iterated function.

I'm not an all that huge fan of super magic macro loops.  But in this
case I don't see how it could even work, as we get special callbacks
for huge pages and holes, and people are trying to add a few more ops
as well.

Reply via email to