On the Sashiko AI review of this patch: > Can calling nouveau_channel_idle(obj->chan->chan) here race with jobs > running on obj->chan->sched when VM_BIND is enabled?
Thanks, the race is real. Legacy PUSHBUF submissions take cli->mutex (nouveau_abi16_get()), so they are serialized with nouveau_abi16_ioctl_del(), which is why the Chromium case was fixed by the plain nouveau_channel_idle(). With VM_BIND the EXEC jobs are pushed from the scheduler workqueue without cli->mutex, so emitting a fence from the ioctl could indeed race with nouveau_exec_job_run(), and jobs still queued in the entity would not be covered by the fence at all. v2 (sent as a reply to this thread) waits for the channel's scheduler to drain first -- the same job-list wait nouveau_sched_fini() already does, factored out as nouveau_sched_wait_idle() -- and then idles the channel. New EXEC submissions cannot sneak in meanwhile because the EXEC ioctl also holds cli->mutex. Alex
