video: rockchip: rga3: fix abort when virt_addr is free

Physically contiguous virt_addr needs to add the offset of the first
page when obtaining the phys_addr.

Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
Change-Id: I8076ad2aac31ad61d8a5e0d4332fe69f702d2adb
This commit is contained in:
Yu Qiaowei
2023-03-01 09:40:57 +08:00
committed by Tao Huang
parent 2c2f6687dc
commit 7f9bf911cd

View File

@@ -181,9 +181,12 @@ static struct sg_table *rga_alloc_sgt(struct rga_virt_addr *virt_addr)
}
/* get sg form pages. */
ret = sg_alloc_table_from_pages(sgt, virt_addr->pages,
/* iova requires minimum page alignment, so sgt cannot have offset */
ret = sg_alloc_table_from_pages(sgt,
virt_addr->pages,
virt_addr->page_count,
0, virt_addr->size,
0,
virt_addr->size,
GFP_KERNEL);
if (ret) {
pr_err("sg_alloc_table_from_pages failed");
@@ -618,7 +621,7 @@ static int rga_mm_map_virt_addr(struct rga_external_buffer *external_buffer,
internal_buffer->virt_addr = virt_addr;
internal_buffer->dma_buffer = buffer;
internal_buffer->mm_flag = mm_flag;
internal_buffer->phys_addr = phys_addr ? phys_addr : 0;
internal_buffer->phys_addr = phys_addr ? phys_addr + virt_addr->offset : 0;
return 0;