Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 931f7035 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
  percpu: don't assume existence of cpu0
parents e305fc5e 04a13c7c
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -197,7 +197,12 @@ static unsigned long pcpu_chunk_addr(struct pcpu_chunk *chunk,
static bool pcpu_chunk_page_occupied(struct pcpu_chunk *chunk,
				     int page_idx)
{
	return *pcpu_chunk_pagep(chunk, 0, page_idx) != NULL;
	/*
	 * Any possible cpu id can be used here, so there's no need to
	 * worry about preemption or cpu hotplug.
	 */
	return *pcpu_chunk_pagep(chunk, raw_smp_processor_id(),
				 page_idx) != NULL;
}

/* set the pointer to a chunk in a page struct */
@@ -297,6 +302,14 @@ static struct pcpu_chunk *pcpu_chunk_addr_search(void *addr)
		return pcpu_first_chunk;
	}

	/*
	 * The address is relative to unit0 which might be unused and
	 * thus unmapped.  Offset the address to the unit space of the
	 * current processor before looking it up in the vmalloc
	 * space.  Note that any possible cpu id can be used here, so
	 * there's no need to worry about preemption or cpu hotplug.
	 */
	addr += raw_smp_processor_id() * pcpu_unit_size;
	return pcpu_get_page_chunk(vmalloc_to_page(addr));
}