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

Commit cdb4cba5 authored by Tejun Heo's avatar Tejun Heo
Browse files

percpu: remove @may_alloc from pcpu_get_pages()



pcpu_get_pages() creates the temp pages array if not already allocated
and returns the pointer to it.  As the function is called from both
[de]population paths and depopulation can only happen after at least
one successful population, the param doesn't make any difference - the
allocation will always happen on the population path anyway.

Remove @may_alloc from pcpu_get_pages().  Also, add an lockdep
assertion pcpu_alloc_mutex instead of vaguely stating that the
exclusion is the caller's responsibility.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent fbbb7f4e
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -22,21 +22,22 @@ static struct page *pcpu_chunk_page(struct pcpu_chunk *chunk,
/**
 * pcpu_get_pages - get temp pages array
 * @chunk: chunk of interest
 * @may_alloc: may allocate the array
 *
 * Returns pointer to array of pointers to struct page which can be indexed
 * with pcpu_page_idx().  Note that there is only one array and access
 * exclusion is the caller's responsibility.
 * with pcpu_page_idx().  Note that there is only one array and accesses
 * should be serialized by pcpu_alloc_mutex.
 *
 * RETURNS:
 * Pointer to temp pages array on success.
 */
static struct page **pcpu_get_pages(struct pcpu_chunk *chunk, bool may_alloc)
static struct page **pcpu_get_pages(struct pcpu_chunk *chunk_alloc)
{
	static struct page **pages;
	size_t pages_size = pcpu_nr_units * pcpu_unit_pages * sizeof(pages[0]);

	if (!pages && may_alloc)
	lockdep_assert_held(&pcpu_alloc_mutex);

	if (!pages)
		pages = pcpu_mem_zalloc(pages_size);
	return pages;
}
@@ -287,7 +288,7 @@ static int pcpu_populate_chunk(struct pcpu_chunk *chunk, int off, int size)
	/* need to allocate and map pages, this chunk can't be immutable */
	WARN_ON(chunk->immutable);

	pages = pcpu_get_pages(chunk, true);
	pages = pcpu_get_pages(chunk);
	if (!pages)
		return -ENOMEM;

@@ -358,7 +359,7 @@ static void pcpu_depopulate_chunk(struct pcpu_chunk *chunk, int off, int size)
	 * successful population attempt so the temp pages array must
	 * be available now.
	 */
	pages = pcpu_get_pages(chunk, false);
	pages = pcpu_get_pages(chunk);
	BUG_ON(!pages);

	/* unmap and free */