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

Commit f3624c39 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ion: ion_page_pool: Use -ENOMEM instead of NULL"

parents 52094546 a93f3584
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2464,7 +2464,7 @@ static int __arm_iommu_attach_device(struct device *dev,
{
	int err;

	err = iommu_attach_device(mapping->domain, dev);
	err = iommu_attach_group(mapping->domain, dev->iommu_group);
	if (err)
		return err;

+6 −1
Original line number Diff line number Diff line
@@ -92,6 +92,9 @@ struct page *ion_page_pool_alloc(struct ion_page_pool *pool, bool *from_pool)
		page = ion_page_pool_alloc_pages(pool);
		*from_pool = false;
	}

	if (!page)
		return ERR_PTR(-ENOMEM);
	return page;
}

@@ -103,7 +106,7 @@ struct page *ion_page_pool_alloc_pool_only(struct ion_page_pool *pool)
	struct page *page = NULL;

	if (!pool)
		return NULL;
		return ERR_PTR(-EINVAL);

	if (mutex_trylock(&pool->mutex)) {
		if (pool->high_count)
@@ -113,6 +116,8 @@ struct page *ion_page_pool_alloc_pool_only(struct ion_page_pool *pool)
		mutex_unlock(&pool->mutex);
	}

	if (!page)
		return ERR_PTR(-ENOMEM);
	return page;
}

+13 −11
Original line number Diff line number Diff line
@@ -81,8 +81,8 @@ static struct page *alloc_buffer_page(struct ion_system_heap *heap,

	page = ion_page_pool_alloc(pool, from_pool);

	if (!page)
		return 0;
	if (IS_ERR(page))
		return page;

	if ((MAKE_ION_ALLOC_DMA_READY && vmid <= 0) || !(*from_pool))
		ion_pages_sync_for_device(dev, page, PAGE_SIZE << order,
@@ -133,7 +133,7 @@ static struct page_info *alloc_largest_available(struct ion_system_heap *heap,

	info = kmalloc(sizeof(*info), GFP_KERNEL);
	if (!info)
		return NULL;
		return ERR_PTR(-ENOMEM);

	for (i = 0; i < NUM_ORDERS; i++) {
		if (size < order_to_size(orders[i]))
@@ -142,7 +142,7 @@ static struct page_info *alloc_largest_available(struct ion_system_heap *heap,
			continue;
		from_pool = !(buffer->flags & ION_FLAG_POOL_FORCE_ALLOC);
		page = alloc_buffer_page(heap, buffer, orders[i], &from_pool);
		if (!page)
		if (IS_ERR(page))
			continue;

		info->page = page;
@@ -153,7 +153,7 @@ static struct page_info *alloc_largest_available(struct ion_system_heap *heap,
	}
	kfree(info);

	return NULL;
	return ERR_PTR(-ENOMEM);
}

static struct page_info *alloc_from_pool_preferred(
@@ -166,7 +166,7 @@ static struct page_info *alloc_from_pool_preferred(

	info = kmalloc(sizeof(*info), GFP_KERNEL);
	if (!info)
		return NULL;
		return ERR_PTR(-ENOMEM);

	for (i = 0; i < NUM_ORDERS; i++) {
		if (size < order_to_size(orders[i]))
@@ -175,7 +175,7 @@ static struct page_info *alloc_from_pool_preferred(
			continue;

		page = alloc_from_secure_pool_order(heap, buffer, orders[i]);
		if (!page)
		if (IS_ERR(page))
			continue;

		info->page = page;
@@ -186,7 +186,7 @@ static struct page_info *alloc_from_pool_preferred(
	}

	page = split_page_from_secure_pool(heap, buffer);
	if (page) {
	if (!IS_ERR(page)) {
		info->page = page;
		info->order = 0;
		info->from_pool = true;
@@ -270,7 +270,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
	struct sg_table table_sync = {0};
	struct scatterlist *sg;
	struct scatterlist *sg_sync;
	int ret;
	int ret = -ENOMEM;
	struct list_head pages;
	struct list_head pages_from_pool;
	struct page_info *info, *tmp_info;
@@ -306,8 +306,10 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
					sys_heap, buffer, size_remaining,
					max_order);

		if (!info)
		if (IS_ERR(info)) {
			ret = PTR_ERR(info);
			goto err;
		}

		sz = (1 << info->order) * PAGE_SIZE;

@@ -414,7 +416,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
		free_buffer_page(sys_heap, buffer, info->page, info->order);
		kfree(info);
	}
	return -ENOMEM;
	return ret;
}

void ion_system_heap_free(struct ion_buffer *buffer)
+5 −5
Original line number Diff line number Diff line
@@ -377,7 +377,7 @@ struct page *alloc_from_secure_pool_order(struct ion_system_heap *heap,
	struct ion_page_pool *pool;

	if (!is_secure_vmid_valid(vmid))
		return NULL;
		return ERR_PTR(-EINVAL);

	pool = heap->secure_pools[vmid][order_to_index(order)];
	return ion_page_pool_alloc_pool_only(pool);
@@ -399,13 +399,13 @@ struct page *split_page_from_secure_pool(struct ion_system_heap *heap,
	 * possible.
	 */
	page = alloc_from_secure_pool_order(heap, buffer, 0);
	if (page)
	if (!IS_ERR(page))
		goto got_page;

	for (i = NUM_ORDERS - 2; i >= 0; i--) {
		order = orders[i];
		page = alloc_from_secure_pool_order(heap, buffer, order);
		if (!page)
		if (IS_ERR(page))
			continue;

		split_page(page, order);
@@ -415,7 +415,7 @@ struct page *split_page_from_secure_pool(struct ion_system_heap *heap,
	 * Return the remaining order-0 pages to the pool.
	 * SetPagePrivate flag to mark memory as secure.
	 */
	if (page) {
	if (!IS_ERR(page)) {
		for (j = 1; j < (1 << order); j++) {
			SetPagePrivate(page + j);
			free_buffer_page(heap, buffer, page + j, 0);
@@ -444,7 +444,7 @@ int ion_secure_page_pool_shrink(

	while (freed < nr_to_scan) {
		page = ion_page_pool_alloc_pool_only(pool);
		if (!page)
		if (IS_ERR(page))
			break;
		list_add(&page->lru, &pages);
		freed += (1 << order);