mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
io_uring/zcrx: split dmabuf unmap and release
Until now unmapping and destroying dmabuf were the same thing. To keep it consistent with non-dmabuf, split it into two separate helpers. Unmap destroys mappings and attachements as it should, and release only putting down the dmabuf fd reference. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://patch.msgid.link/bd8c1fd8dac85ce0cf839b389ecd6050761965ca.1786108672.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
eb840beb51
commit
be94c24ce3
|
|
@ -121,21 +121,25 @@ static int io_populate_area_dma(struct io_zcrx_ifq *ifq,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void io_release_dmabuf(struct io_zcrx_mem *mem)
|
||||
static void io_unmap_dmabuf(struct io_zcrx_mem *mem)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_DMA_SHARED_BUFFER))
|
||||
return;
|
||||
|
||||
if (mem->sgt)
|
||||
dma_buf_unmap_attachment_unlocked(mem->attach, mem->sgt,
|
||||
DMA_FROM_DEVICE);
|
||||
if (mem->attach)
|
||||
dma_buf_detach(mem->dmabuf, mem->attach);
|
||||
if (mem->dmabuf)
|
||||
dma_buf_put(mem->dmabuf);
|
||||
|
||||
mem->sgt = NULL;
|
||||
mem->attach = NULL;
|
||||
}
|
||||
|
||||
static void io_release_dmabuf(struct io_zcrx_mem *mem)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_DMA_SHARED_BUFFER))
|
||||
return;
|
||||
if (mem->dmabuf)
|
||||
dma_buf_put(mem->dmabuf);
|
||||
mem->dmabuf = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -190,6 +194,7 @@ static int io_import_dmabuf(struct io_zcrx_ifq *ifq,
|
|||
mem->size = len;
|
||||
return 0;
|
||||
err:
|
||||
io_unmap_dmabuf(mem);
|
||||
io_release_dmabuf(mem);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -317,7 +322,7 @@ static void io_zcrx_unmap_area(struct io_zcrx_ifq *ifq,
|
|||
}
|
||||
|
||||
if (area->mem.is_dmabuf) {
|
||||
io_release_dmabuf(&area->mem);
|
||||
io_unmap_dmabuf(&area->mem);
|
||||
} else {
|
||||
dma_unmap_sgtable(ifq->dev, &area->mem.page_sg_table,
|
||||
DMA_FROM_DEVICE, IO_DMA_ATTR);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user