Expose the SYNC_UPDATE event to userspace so it can respond to changes in syncobj state. Signed-off-by: Mihail Atanassov <mihail.atanassov@xxxxxxx> --- drivers/gpu/drm/panthor/panthor_sched.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c index 92172b2c6253..67c27fcc3345 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -643,6 +643,9 @@ struct panthor_group { * panthor_group::groups::waiting list. */ struct list_head wait_node; + + /** @eventfd_sync_update_ctx: eventfd context to signal on GPU_SYNC_UPDATE */ + struct eventfd_ctx *eventfd_sync_update_ctx; }; /** @@ -797,6 +800,10 @@ static void group_release_work(struct work_struct *work) panthor_kernel_bo_destroy(group->syncobjs); panthor_vm_put(group->vm); + + if (group->eventfd_sync_update_ctx) + eventfd_ctx_put(group->eventfd_sync_update_ctx); + kfree(group); } @@ -1501,6 +1508,9 @@ static void csg_slot_sync_update_locked(struct panthor_device *ptdev, /* Rerun XGS jobs immediately, as this can potentially unblock the group */ panthor_xgs_queue_pool_recheck(group->pfile); + if (group->eventfd_sync_update_ctx) + eventfd_signal(group->eventfd_sync_update_ctx); + if (!group->user_submit) group_queue_work(group, sync_upd); } @@ -3204,9 +3214,18 @@ int panthor_group_create(struct panthor_file *pfile, INIT_WORK(&group->tiler_oom_work, group_tiler_oom_work); INIT_WORK(&group->release_work, group_release_work); - if (group_args->flags & DRM_PANTHOR_GROUP_CREATE_USER_SUBMIT) + if (group_args->flags & DRM_PANTHOR_GROUP_CREATE_USER_SUBMIT) { group->user_submit = true; + if (group_args->eventfd_sync_update >= 0) { + group->eventfd_sync_update_ctx = eventfd_ctx_fdget( + group_args->eventfd_sync_update); + ret = PTR_ERR_OR_ZERO(group->eventfd_sync_update_ctx); + if (ret) + goto err_put_group; + } + } + group->vm = panthor_vm_pool_get_vm(pfile->vms, group_args->vm_id); if (!group->vm) { ret = -EINVAL; -- 2.45.0