On Mon, 2 Dec 2019 12:50:20 +0000 Robin Murphy <robin.murphy@xxxxxxx> wrote: > On 29/11/2019 1:59 pm, Boris Brezillon wrote: > > Userspace might tag a BO purgeable while it's still referenced by GPU > > jobs. We need to make sure the shrinker does not purge such BOs until > > all jobs referencing it are finished. > > Nit: for extra robustness, perhaps it's worth using the refcount_t API > rather than bare atomic_t? I considered doing that. The problem is, we start counting from 0, not 1, and the refcount API assumes counters start at 0, and should never see a 0 -> 1 transition. I guess we could do if (refcount_inc_not_zero()) { ... } else { refcount_set(1); ... } so we at least get the integer overflow/underflow protection. Anyway, I'm reworking the gem_shmem code so we can refcount the sgt users (I actually re-use the page_use_count counter and turn into a refcount_t so we don't need to take the lock if it's > 0). With this change I think I won't need the gpu_usecount.