/* For each cpu, unmap pages [@page_start,@page_end) out of @chunk. Corresponding elements in @pages were cleared by the caller and can be used to carry information to pcpu_free_pages() which will be called after all unmaps are finished. The caller should call proper pre/post flush functions.  */
static void pcpu_unmap_pages(struct pcpu_chunk *chunk, struct page **pages, unsigned long *populated, int page_start, int page_end)
/* For each cpu, unmap pages [@page_start,@page_end) out of @chunk. Corresponding elements in @pages were cleared by the caller and can be used to carry information to pcpu_free_pages() which will be called after all unmaps are finished. The caller should call proper pre/post flush functions.  */
static void pcpu_unmap_pages(struct pcpu_chunk *chunk, struct page **pages, unsigned long *populated, int page_start, int page_end)
{
	unsigned int cpu;
	int i;
	for_each_possible_cpu(cpu) {
		for (i = page_start; i < page_end; i++) {
			struct page *page;
			page = pcpu_chunk_page(chunk, cpu, i);
			WARN_ON(!page);
			pages[pcpu_page_idx(cpu, i)] = page;
		}
		__pcpu_unmap_pages(pcpu_chunk_addr(chunk, cpu, page_start),
				   page_end - page_start);
	}
	for (i = page_start; i < page_end; i++)
		__clear_bit(i, populated);
}