freedreno/drm: Avoid CPU_PREP ioctl if bo is idle

With userspace fences, if we know definitely that the buffer is idle
(which implies that it is not shared with other processes, etc), then
skip the ioctl.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14900>
This commit is contained in:
Rob Clark 2022-02-10 09:31:16 -08:00 committed by Marge Bot
parent 9bcc983256
commit 88a10c6216

View file

@ -503,14 +503,14 @@ fd_bo_upload(struct fd_bo *bo, void *src, unsigned len)
int
fd_bo_cpu_prep(struct fd_bo *bo, struct fd_pipe *pipe, uint32_t op)
{
simple_mtx_lock(&table_lock);
enum fd_bo_state state = fd_bo_state(bo);
simple_mtx_unlock(&table_lock);
if (state == FD_BO_STATE_IDLE)
return 0;
if (op & (FD_BO_PREP_NOSYNC | FD_BO_PREP_FLUSH)) {
simple_mtx_lock(&table_lock);
enum fd_bo_state state = fd_bo_state(bo);
simple_mtx_unlock(&table_lock);
if (state == FD_BO_STATE_IDLE)
return 0;
if (op & FD_BO_PREP_FLUSH)
bo_flush(bo);