[Intel-gfx] [PATCH v2 02/15] drm/i915: Don't free shared locks while shared
Thomas Hellström (Intel)
thomas_os at shipmail.org
Tue May 18 11:30:22 UTC 2021
On 5/18/21 1:18 PM, Maarten Lankhorst wrote:
> Op 18-05-2021 om 10:26 schreef Thomas Hellström:
>> We are currently sharing the VM reservation locks across a number of
>> gem objects with page-table memory. Since TTM will individiualize the
>> reservation locks when freeing objects, including accessing the shared
>> locks, make sure that the shared locks are not freed until that is done.
>> For PPGTT we add an additional refcount, for GGTT we take additional
>> measures to make sure objects sharing the GGTT reservation lock are
>> freed at GGTT takedown
>>
>> Signed-off-by: Thomas Hellström <thomas.hellstrom at linux.intel.com>
>> ---
>> v2: Try harder to make sure objects sharing the GGTT reservation lock are
>> freed at GGTT takedown.
>> ---
>> drivers/gpu/drm/i915/gem/i915_gem_object.c | 3 ++
>> .../gpu/drm/i915/gem/i915_gem_object_types.h | 1 +
>> drivers/gpu/drm/i915/gt/intel_ggtt.c | 19 ++++++--
>> drivers/gpu/drm/i915/gt/intel_gtt.c | 45 +++++++++++++++----
>> drivers/gpu/drm/i915/gt/intel_gtt.h | 30 ++++++++++++-
>> drivers/gpu/drm/i915/gt/intel_ppgtt.c | 2 +-
>> drivers/gpu/drm/i915/i915_drv.c | 5 +++
>> 7 files changed, 92 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c
>> index 28144410df86..abadf0994ad0 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
>> @@ -252,6 +252,9 @@ static void __i915_gem_free_objects(struct drm_i915_private *i915,
>> if (obj->mm.n_placements > 1)
>> kfree(obj->mm.placements);
>>
>> + if (obj->resv_shared_from)
>> + i915_vm_resv_put(obj->resv_shared_from);
>> +
>> /* But keep the pointer alive for RCU-protected lookups */
>> call_rcu(&obj->rcu, __i915_gem_free_object_rcu);
>> cond_resched();
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
>> index 0727d0c76aa0..450340a73186 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
>> @@ -149,6 +149,7 @@ struct drm_i915_gem_object {
>> * when i915_gem_ww_ctx_backoff() or i915_gem_ww_ctx_fini() are called.
>> */
>> struct list_head obj_link;
>> + struct dma_resv *resv_shared_from;
> Since this can only be a vm object, would it make sense to make this a pointer to the vm address space, so we can call vm_resv_put on it directly?
>
> The current pointer type and name makes it look generic, but if you try to use it with anything but an address space, it will blow up.
>
> Otherwise looks good. I guess we cannot force all bo's to be deleted before the vm is freed. :-)
>
> So with that fixed
>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
Thanks, I'll take a look at that.
Thomas
More information about the dri-devel
mailing list