Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
percpu: don't assume existence of cpu0

+14 -1
+14 -1
mm/percpu.c
··· 197 197 static bool pcpu_chunk_page_occupied(struct pcpu_chunk *chunk, 198 198 int page_idx) 199 199 { 200 - return *pcpu_chunk_pagep(chunk, 0, page_idx) != NULL; 200 + /* 201 + * Any possible cpu id can be used here, so there's no need to 202 + * worry about preemption or cpu hotplug. 203 + */ 204 + return *pcpu_chunk_pagep(chunk, raw_smp_processor_id(), 205 + page_idx) != NULL; 201 206 } 202 207 203 208 /* set the pointer to a chunk in a page struct */ ··· 302 297 return pcpu_first_chunk; 303 298 } 304 299 300 + /* 301 + * The address is relative to unit0 which might be unused and 302 + * thus unmapped. Offset the address to the unit space of the 303 + * current processor before looking it up in the vmalloc 304 + * space. Note that any possible cpu id can be used here, so 305 + * there's no need to worry about preemption or cpu hotplug. 306 + */ 307 + addr += raw_smp_processor_id() * pcpu_unit_size; 305 308 return pcpu_get_page_chunk(vmalloc_to_page(addr)); 306 309 } 307 310