On 25/09/20 23:22, Ben Gardon wrote:
> +     bool done;
> +
> +     done = try_step_down(iter);
> +     if (done)
> +             return;
> +
> +     done = try_step_side(iter);
> +     while (!done) {
> +             if (!try_step_up(iter)) {
> +                     iter->valid = false;
> +                     break;
> +             }
> +             done = try_step_side(iter);

Seems easier to read without the "done" boolean:

        if (try_step_down(iter))
                return;

        do {
                /* Maybe try_step_right? :) */
                if (try_step_side(iter))
                        return;
        } while (try_step_up(iter));
        iter->valid = false;

Also it may be worth adding an "end_level" argument to the constructor,
and checking against it in try_step_down instead of using PG_LEVEL_4K.
By passing in PG_LEVEL_2M, you can avoid adding
tdp_iter_next_no_step_down in patch 17 and generally simplify the logic
there.

Paolo

Reply via email to