On 02/26/2018 09:39 PM, Emilio G. Cota wrote: > +/* list iterators for lists of tagged pointers in TranslationBlock */ > +#define TB_FOR_EACH_TAGGED(head, tb, n, field) \ > + for (n = (head) & 1, \ > + tb = (TranslationBlock *)((head) & ~1); \ > + tb; \ > + tb = (TranslationBlock *)tb->field[n], \ > + n = (uintptr_t)tb & 1, \ > + tb = (TranslationBlock *)((uintptr_t)tb & ~1)) > + > +#define PAGE_FOR_EACH_TB(pagedesc, tb, n) \ > + TB_FOR_EACH_TAGGED((pagedesc)->first_tb, tb, n, page_next) > +
I'm not sure I like the generalization of TB_FOR_EACH_TAGGED. Do you use it for anything besides PAGE_FOR_EACH_TB? Weird indentation in the clauses. Otherwise, Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~