tlb->need_flush += &__get_cpu_var(quicklist)[0].nr_pages != 0; makes no sense whatsoever. How the hell can you ever get the address of __get_cpu_var(quicklist)[0].nr_pages to be NULL? Postfix operators have higher precedence than prefix ones, so that's &(((__get_cpu_var(quicklist))[0]).nr_pages)