Re: drm pull for v5.3-rc1

From: Christoph Hellwig
Date: Wed Aug 07 2019 - 02:40:05 EST


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.