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

Commit 15da191d authored by Rebecca Schultz Zavin's avatar Rebecca Schultz Zavin Committed by Arve Hjønnevåg
Browse files

gpu: ion: Fix lockdep issue in ion_page_pool



Currently the mutex is held while kmalloc is called, under a low memory
condition this might trigger the shrinker which also takes this mutex.
Refactor so the mutex is not held during allocation.

Change-Id: Ic1d3b2f69e61209191bac84724ba56f6b98e2bc4
Signed-off-by: default avatarRebecca Schultz Zavin <rebecca@android.com>
parent cb80c2ec
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page)
	item = kmalloc(sizeof(struct ion_page_pool_item), GFP_KERNEL);
	if (!item)
		return -ENOMEM;

	mutex_lock(&pool->mutex);
	item->page = page;
	if (PageHighMem(page)) {
		list_add_tail(&item->list, &pool->high_items);
@@ -61,6 +63,7 @@ static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page)
		list_add_tail(&item->list, &pool->low_items);
		pool->low_count++;
	}
	mutex_unlock(&pool->mutex);
	return 0;
}

@@ -110,9 +113,7 @@ void ion_page_pool_free(struct ion_page_pool *pool, struct page* page)
{
	int ret;

	mutex_lock(&pool->mutex);
	ret = ion_page_pool_add(pool, page);
	mutex_unlock(&pool->mutex);
	if (ret)
		ion_page_pool_free_pages(pool, page);
}