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>
int
fd_bo_cpu_prep(struct fd_bo *bo, struct fd_pipe *pipe, uint32_t op)
{
- 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);
+ 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 (state == FD_BO_STATE_IDLE)
+ return 0;
+ if (op & (FD_BO_PREP_NOSYNC | FD_BO_PREP_FLUSH)) {
if (op & FD_BO_PREP_FLUSH)
bo_flush(bo);