[PATCH v2 2/4] drm/xe: Add ref counting for xe_file
Lucas De Marchi
lucas.demarchi at intel.com
Thu Jul 18 13:01:14 UTC 2024
On Tue, Jul 09, 2024 at 08:41:49PM GMT, Matthew Brost wrote:
>On Mon, Jul 08, 2024 at 05:28:33PM -0700, Umesh Nerlige Ramappa wrote:
>> Add ref counting for xe_file.
>>
>> v2:
>> - Add kernel doc for exported functions (Matt)
>> - Instead of xe_file_destroy, export the get/put helpers (Lucas)
>
>Won't get into this bikeshed here.
in the previous version I also pointed at other alternatives that would
allow the inlining you were talking about. Anyway, as we said we may
want to make the pattern uniform across the driver later
>
>>
>> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_device.c | 31 ++++++++++++++++++++++++++--
>> drivers/gpu/drm/xe/xe_device.h | 3 +++
>> drivers/gpu/drm/xe/xe_device_types.h | 3 +++
>> 3 files changed, 35 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
>> index c5464ad5d908..61dc0a37a4d0 100644
>> --- a/drivers/gpu/drm/xe/xe_device.c
>> +++ b/drivers/gpu/drm/xe/xe_device.c
>> @@ -90,11 +90,14 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
>> spin_unlock(&xe->clients.lock);
>>
>> file->driver_priv = xef;
>> + kref_init(&xef->refcount);
>> +
>> return 0;
>> }
>>
>> -static void xe_file_destroy(struct xe_file *xef)
>> +static void xe_file_destroy(struct kref *ref)
>> {
>> + struct xe_file *xef = container_of(ref, struct xe_file, refcount);
>> struct xe_device *xe = xef->xe;
>>
>> xa_destroy(&xef->exec_queue.xa);
>> @@ -110,6 +113,30 @@ static void xe_file_destroy(struct xe_file *xef)
>> kfree(xef);
>> }
>>
>> +/**
>> + * xe_file_get: Take a reference to the xe file object
>
>s/xe_file_get/xe_file_get()
>
>> + * @xef: Pointer to the xe file
>> + *
>> + * Anyone making a copy of xef must take a reference to the xe file
>
>s/'Anyone making a copy'/'Anyone with a pointer'
>
>> + * object using this call.
>
>
>Returns: xe file pointer
>
>> + */
>> +struct xe_file *xe_file_get(struct xe_file *xef)
>> +{
>> + kref_get(&xef->refcount);
>> + return xef;
>> +}
>> +
>> +/**
>> + * xe_file_put: Drop a reference to the xe file object
>
>s/xe_file_put/xe_file_put()
>
>With the nits fixed:
>Reviewed-by: Matthew Brost <matthew.brost at intel.com>
agreed with the comments, but the kernel-doc ones don't appear
correct... we document the functions like
/**
* xe_file_put - Drop a reference to the xe file object
* @ .... arguments
*
* ... additional doc
*
* Returns: ...
*/
Lucas De Marchi
>
>> + * @xef: Pointer to the xe file
>> + *
>> + * Used to drop reference to the xef object
>> + */
>> +void xe_file_put(struct xe_file *xef)
>> +{
>> + kref_put(&xef->refcount, xe_file_destroy);
>> +}
>> +
>> static void xe_file_close(struct drm_device *dev, struct drm_file *file)
>> {
>> struct xe_file *xef = file->driver_priv;
>> @@ -132,7 +159,7 @@ static void xe_file_close(struct drm_device *dev, struct drm_file *file)
>> xe_vm_close_and_put(vm);
>> mutex_unlock(&xef->vm.lock);
>>
>> - xe_file_destroy(xef);
>> + xe_file_put(xef);
>> }
>>
>> static const struct drm_ioctl_desc xe_ioctls[] = {
>> diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
>> index 0a2a3e7fd402..533ccfb2567a 100644
>> --- a/drivers/gpu/drm/xe/xe_device.h
>> +++ b/drivers/gpu/drm/xe/xe_device.h
>> @@ -171,4 +171,7 @@ static inline bool xe_device_wedged(struct xe_device *xe)
>>
>> void xe_device_declare_wedged(struct xe_device *xe);
>>
>> +struct xe_file *xe_file_get(struct xe_file *xef);
>> +void xe_file_put(struct xe_file *xef);
>> +
>> #endif
>> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
>> index f0cf9020e463..70115fb8d806 100644
>> --- a/drivers/gpu/drm/xe/xe_device_types.h
>> +++ b/drivers/gpu/drm/xe/xe_device_types.h
>> @@ -578,6 +578,9 @@ struct xe_file {
>>
>> /** @client: drm client */
>> struct xe_drm_client *client;
>> +
>> + /** @refcount: ref count of this xe file */
>> + struct kref refcount;
>> };
>>
>> #endif
>> --
>> 2.38.1
>>
More information about the Intel-xe
mailing list