Unverified Commit 695c5aec authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!8828 drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr()

parents 7e62f703 b57ef843
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -447,12 +447,19 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,
	mapping_set_unevictable(mapping);

	for (i = page_offset; i < page_offset + NUM_FAULT_PAGES; i++) {
		/* Can happen if the last fault only partially filled this
		 * section of the pages array before failing. In that case
		 * we skip already filled pages.
		 */
		if (pages[i])
			continue;

		pages[i] = shmem_read_mapping_page(mapping, i);
		if (IS_ERR(pages[i])) {
			mutex_unlock(&bo->base.pages_lock);
			ret = PTR_ERR(pages[i]);
			pages[i] = NULL;
			goto err_pages;
			goto err_bo;
		}
	}

@@ -462,7 +469,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,
	ret = sg_alloc_table_from_pages(sgt, pages + page_offset,
					NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL);
	if (ret)
		goto err_pages;
		goto err_bo;

	ret = dma_map_sgtable(pfdev->dev, sgt, DMA_BIDIRECTIONAL, 0);
	if (ret)
@@ -482,8 +489,6 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as,

err_map:
	sg_free_table(sgt);
err_pages:
	drm_gem_shmem_put_pages(&bo->base);
err_bo:
	panfrost_gem_mapping_put(bomapping);
	return ret;