All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Andrzej Hajda <andrzej.hajda@intel.com>,
	Ashutosh Dixit <ashutosh.dixit@intel.com>,
	intel-gfx@lists.freedesktop.org
Cc: Andi Shyti <andi.shyti@intel.com>
Subject: Re: [Intel-gfx] [PATCH 6/8] drm/i915/gt: Fix memory leaks in per-gt sysfs
Date: Tue, 10 May 2022 10:48:07 +0100	[thread overview]
Message-ID: <9f1f6c83-67ad-b222-97ff-ec3905e68eeb@linux.intel.com> (raw)
In-Reply-To: <d0fe2315-563d-31b1-28eb-7816800270dd@intel.com>


On 10/05/2022 10:39, Andrzej Hajda wrote:
> On 10.05.2022 10:18, Tvrtko Ursulin wrote:
>>
>> On 10/05/2022 08:58, Andrzej Hajda wrote:
>>> Hi Tvrtko,
>>>
>>> On 10.05.2022 09:28, Tvrtko Ursulin wrote:
>>>>
>>>> On 29/04/2022 20:56, Ashutosh Dixit wrote:
>>>>> All kmalloc'd kobjects need a kobject_put() to free memory. For 
>>>>> example in
>>>>> previous code, kobj_gt_release() never gets called. The requirement of
>>>>> kobject_put() now results in a slightly different code organization.
>>>>>
>>>>> v2: s/gtn/gt/ (Andi)
>>>>>
>>>>> Cc: Andi Shyti <andi.shyti@intel.com>
>>>>> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
>>>>> Fixes: b770bcfae9ad ("drm/i915/gt: create per-tile sysfs interface")
>>>>> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>>>>> ---
>>>>>   drivers/gpu/drm/i915/gt/intel_gt.c       |  1 +
>>>>>   drivers/gpu/drm/i915/gt/intel_gt_sysfs.c | 29 
>>>>> ++++++++++--------------
>>>>>   drivers/gpu/drm/i915/gt/intel_gt_sysfs.h |  6 +----
>>>>>   drivers/gpu/drm/i915/gt/intel_gt_types.h |  3 +++
>>>>>   drivers/gpu/drm/i915/i915_sysfs.c        |  2 ++
>>>>>   5 files changed, 19 insertions(+), 22 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c 
>>>>> b/drivers/gpu/drm/i915/gt/intel_gt.c
>>>>> index 92394f13b42f..9aede288eb86 100644
>>>>> --- a/drivers/gpu/drm/i915/gt/intel_gt.c
>>>>> +++ b/drivers/gpu/drm/i915/gt/intel_gt.c
>>>>> @@ -785,6 +785,7 @@ void intel_gt_driver_unregister(struct intel_gt 
>>>>> *gt)
>>>>>   {
>>>>>       intel_wakeref_t wakeref;
>>>>>   +    intel_gt_sysfs_unregister(gt);
>>>>>       intel_rps_driver_unregister(&gt->rps);
>>>>>       intel_gsc_fini(&gt->gsc);
>>>>>   diff --git a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c 
>>>>> b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
>>>>> index 8ec8bc660c8c..9e4ebf53379b 100644
>>>>> --- a/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
>>>>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_sysfs.c
>>>>> @@ -24,7 +24,7 @@ bool is_object_gt(struct kobject *kobj)
>>>>>     static struct intel_gt *kobj_to_gt(struct kobject *kobj)
>>>>>   {
>>>>> -    return container_of(kobj, struct kobj_gt, base)->gt;
>>>>> +    return container_of(kobj, struct intel_gt, sysfs_gt);
>>>>>   }
>>>>>     struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
>>>>> @@ -72,9 +72,9 @@ static struct attribute *id_attrs[] = {
>>>>>   };
>>>>>   ATTRIBUTE_GROUPS(id);
>>>>>   +/* A kobject needs a release() method even if it does nothing */
>>>>>   static void kobj_gt_release(struct kobject *kobj)
>>>>>   {
>>>>> -    kfree(kobj);
>>>>>   }
>>>>>     static struct kobj_type kobj_gt_type = {
>>>>> @@ -85,8 +85,6 @@ static struct kobj_type kobj_gt_type = {
>>>>>     void intel_gt_sysfs_register(struct intel_gt *gt)
>>>>>   {
>>>>> -    struct kobj_gt *kg;
>>>>> -
>>>>>       /*
>>>>>        * We need to make things right with the
>>>>>        * ABI compatibility. The files were originally
>>>>> @@ -98,25 +96,22 @@ void intel_gt_sysfs_register(struct intel_gt *gt)
>>>>>       if (gt_is_root(gt))
>>>>>           intel_gt_sysfs_pm_init(gt, gt_get_parent_obj(gt));
>>>>>   -    kg = kzalloc(sizeof(*kg), GFP_KERNEL);
>>>>> -    if (!kg)
>>>>> +    /* init and xfer ownership to sysfs tree */
>>>>> +    if (kobject_init_and_add(&gt->sysfs_gt, &kobj_gt_type,
>>>>> +                 gt->i915->sysfs_gt, "gt%d", gt->info.id))
>>>>
>>>> Was there closure/agreement on the matter of whether or not there is 
>>>> a potential race between "kfree(gt)" and sysfs access (last put from 
>>>> sysfs that is)? I've noticed Andrzej and Ashutosh were discussing it 
>>>> but did not read all the details.
>>>>
>>>
>>> Not really :)
>>> IMO docs are against this practice, Ashutosh shows examples of this 
>>> practice in code and according to his analysis it is safe.
>>> I gave up looking for contradictions :) Either it is OK, kobject is 
>>> not fully shared object, docs are obsolete and needs update, either 
>>> the patch is wrong.
>>> Anyway finally I tend to accept this solution, I failed to prove it 
>>> is wrong :)
>>
>> Like a question of whether hotunplug can be triggered while userspace 
>> is sitting in a sysfs hook? Final kfree then has to be delayed until 
>> userspace exists.
>>
>> Btw where is the "kfree(gt)" for the tiles on the PCI remove path? I 
>> can't find it.. Do we have a leak?
> 
> intel_gt_tile_cleanup ?

Called from intel_gt_release_all, whose only caller is the failure path 
of i915_driver_probe. Feels like something is missing?

Regards,

Tvrtko

  reply	other threads:[~2022-05-10  9:48 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-29 19:56 [Intel-gfx] [PATCH v4 0/8] drm/i915: Media freq factor and per-gt enhancements/fixes Ashutosh Dixit
2022-04-29 19:56 ` [Intel-gfx] [PATCH 1/8] drm/i915: Introduce has_media_ratio_mode Ashutosh Dixit
2022-04-29 19:56 ` [Intel-gfx] [PATCH 2/8] drm/i915/gt: Add media freq factor to per-gt sysfs Ashutosh Dixit
2022-05-10  7:24   ` Tvrtko Ursulin
2022-05-12  4:25     ` Dixit, Ashutosh
2022-04-29 19:56 ` [Intel-gfx] [PATCH 3/8] drm/i915/pcode: Extend pcode functions for multiple gt's Ashutosh Dixit
2022-05-02 12:54   ` Rodrigo Vivi
2022-05-10  6:51   ` Andi Shyti
2022-05-10  7:34   ` Tvrtko Ursulin
2022-05-10  7:43     ` Jani Nikula
2022-05-11  5:26       ` Dixit, Ashutosh
2022-05-11  8:18         ` Tvrtko Ursulin
2022-05-12  4:28           ` Dixit, Ashutosh
2022-04-29 19:56 ` [Intel-gfx] [PATCH 4/8] drm/i915/pcode: Add a couple of pcode helpers Ashutosh Dixit
2022-04-29 19:56 ` [Intel-gfx] [PATCH 5/8] drm/i915/gt: Add media RP0/RPn to per-gt sysfs Ashutosh Dixit
2022-05-10  7:37   ` Tvrtko Ursulin
2022-05-12  4:25     ` Dixit, Ashutosh
2022-04-29 19:56 ` [Intel-gfx] [PATCH 6/8] drm/i915/gt: Fix memory leaks in " Ashutosh Dixit
2022-05-10  6:02   ` Andi Shyti
2022-05-10  7:28   ` Tvrtko Ursulin
2022-05-10  7:58     ` Andrzej Hajda
2022-05-10  8:18       ` Tvrtko Ursulin
2022-05-10  9:39         ` Andrzej Hajda
2022-05-10  9:48           ` Tvrtko Ursulin [this message]
2022-05-10 10:41             ` Andrzej Hajda
2022-05-10 13:25               ` Tvrtko Ursulin
2022-05-11 23:15               ` Dixit, Ashutosh
2022-05-12  7:48                 ` Tvrtko Ursulin
2022-05-13  5:05                   ` Dixit, Ashutosh
2022-05-13  9:28                     ` Tvrtko Ursulin
2022-04-29 19:56 ` [Intel-gfx] [PATCH 7/8] drm/i915/gt: Expose per-gt RPS defaults in sysfs Ashutosh Dixit
2022-05-10  7:53   ` Tvrtko Ursulin
2022-05-10 10:58     ` Andi Shyti
2022-05-26 19:10       ` Dixit, Ashutosh
2022-05-26 19:09     ` Dixit, Ashutosh
2022-04-29 19:56 ` [Intel-gfx] [PATCH 8/8] drm/i915/gt: Expose default value for media_freq_factor in per-gt sysfs Ashutosh Dixit
2022-04-29 20:37 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Media freq factor and per-gt enhancements/fixes (rev4) Patchwork
2022-04-29 20:37 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-04-29 21:10 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-04-29 23:38 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-04-30  0:44   ` Dixit, Ashutosh
2022-04-30  5:28     ` Vudum, Lakshminarayana
2022-04-30  5:09 ` [Intel-gfx] ✓ Fi.CI.IGT: success " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2022-04-13 18:11 [Intel-gfx] [PATCH 0/8] drm/i915: Media freq factor and per-gt enhancements/fixes Ashutosh Dixit
2022-04-13 18:11 ` [Intel-gfx] [PATCH 6/8] drm/i915/gt: Fix memory leaks in per-gt sysfs Ashutosh Dixit
2022-04-13 19:14   ` Dixit, Ashutosh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9f1f6c83-67ad-b222-97ff-ec3905e68eeb@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=andi.shyti@intel.com \
    --cc=andrzej.hajda@intel.com \
    --cc=ashutosh.dixit@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.