On Mon, Nov 28, 2016 at 1:15 PM, Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> wrote: > > I've worked a bit more on this. I had a nice, clean & compact > implementation where basically all ptr_list walking was done by > something like: > struct ptr_iter iter; > ptr_iter_init(&iter, head); > while ((ptr = ptr_iter_next(&iter))) > ... Last time I try that, I look at the machine code and realized that using iter struct is not quite the same as using macro. On each function boundary, the compiler still try to sync the data register content into the iter structure in memory. In other words, there is no way to make the iter variable as register, it always get sync into memory. I did run a full kernel source check back then, did not find an observable difference. The time difference is within the variance of each run. Maybe due to most of the list are very short. Chris -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html