From: Jani Nikula <jani.nikula@linux.intel.com>
To: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>,
Armin Wolf <W_Armin@gmx.de>
Cc: intel-gfx@lists.freedesktop.org,
"Badal Nilawar" <badal.nilawar@intel.com>,
"Andi Shyti" <andi.shyti@intel.com>,
"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
linux-hwmon@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2] drm/i915/hwmon: Get rid of devm
Date: Tue, 16 Apr 2024 10:44:09 +0300 [thread overview]
Message-ID: <87wmoxzr92.fsf@intel.com> (raw)
In-Reply-To: <857cgyt0iv.wl-ashutosh.dixit@intel.com>
On Mon, 15 Apr 2024, "Dixit, Ashutosh" <ashutosh.dixit@intel.com> wrote:
> On Mon, 15 Apr 2024 16:35:02 -0700, Armin Wolf wrote:
>>
>
> Hi Armin,
>
>> Am 16.04.24 um 00:36 schrieb Ashutosh Dixit:
>> > @@ -818,10 +818,10 @@ void i915_hwmon_register(struct drm_i915_private *i915)
>> > hwm_get_preregistration_info(i915);
>> >
>> > /* hwmon_dev points to device hwmon<i> */
>> > - hwmon_dev = devm_hwmon_device_register_with_info(dev, ddat->name,
>> > - ddat,
>> > - &hwm_chip_info,
>> > - hwm_groups);
>> > + hwmon_dev = hwmon_device_register_with_info(dev, ddat->name,
>> > + ddat,
>> > + &hwm_chip_info,
>> > + hwm_groups);
>> > if (IS_ERR(hwmon_dev)) {
>> > i915->hwmon = NULL;
>>
>> you need to free hwmon here, since it is not managed by devres anymore.
>
> Thanks a lot for catching this, I had missed it in v2, it's fixed in v3. I
> am actually reusing i915_hwmon_unregister() for error unwinding in v3.
>
>>
>> > return;
>> > @@ -838,10 +838,10 @@ void i915_hwmon_register(struct drm_i915_private *i915)
>> > if (!hwm_gt_is_visible(ddat_gt, hwmon_energy, hwmon_energy_input, 0))
>> > continue;
>> >
>> > - hwmon_dev = devm_hwmon_device_register_with_info(dev, ddat_gt->name,
>> > - ddat_gt,
>> > - &hwm_gt_chip_info,
>> > - NULL);
>> > + hwmon_dev = hwmon_device_register_with_info(dev, ddat_gt->name,
>> > + ddat_gt,
>> > + &hwm_gt_chip_info,
>> > + NULL);
>> > if (!IS_ERR(hwmon_dev))
>> > ddat_gt->hwmon_dev = hwmon_dev;
>> > }
>> > @@ -849,5 +849,26 @@ void i915_hwmon_register(struct drm_i915_private *i915)
>> >
>> > void i915_hwmon_unregister(struct drm_i915_private *i915)
>> > {
>> > - fetch_and_zero(&i915->hwmon);
>> > + struct i915_hwmon *hwmon = fetch_and_zero(&i915->hwmon);
>>
>> Why is fetch_and_zero() necessary here?
>
> As mentioned, in v3 i915_hwmon_unregister() itself is used for error
> unwinding so we need to prevent multiple device_unregister's etc. That is
> the purpose of setting i915->hwmon to NULL. But even earlier, though it is
> not obvious, i915_hwmon_unregister() is called multiple times. So e.g. it
> will be called at device unbind as well as module unload. So once again we
> prevent multiple device_unregister's by setting and checking for NULL
> i915->hwmon.
IMO it's more obvious to set i915->hwmon to NULL separately.
BR,
Jani.
>
>>
>> > + struct hwm_drvdata *ddat = &hwmon->ddat;
>> > + struct intel_gt *gt;
>> > + int i;
>> > +
>> > + if (!hwmon)
>> > + return;
>> > +
>> > + for_each_gt(gt, i915, i) {
>> > + struct hwm_drvdata *ddat_gt = hwmon->ddat_gt + i;
>> > +
>> > + if (ddat_gt->hwmon_dev) {
>> > + hwmon_device_unregister(ddat_gt->hwmon_dev);
>> > + ddat_gt->hwmon_dev = NULL;
>> > + }
>> > + }
>> > +
>> > + if (ddat->hwmon_dev)
>> > + hwmon_device_unregister(ddat->hwmon_dev);
>> > +
>> > + mutex_destroy(&hwmon->hwmon_lock);
>> > + kfree(hwmon);
>> > }
>
> Thanks.
> --
> Ashutosh
--
Jani Nikula, Intel
next prev parent reply other threads:[~2024-04-16 7:44 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-15 22:36 [PATCH v2] drm/i915/hwmon: Get rid of devm Ashutosh Dixit
2024-04-15 23:35 ` Armin Wolf
2024-04-16 4:05 ` Dixit, Ashutosh
2024-04-16 7:44 ` Jani Nikula [this message]
2024-04-16 0:44 ` ✓ Fi.CI.BAT: success for drm/i915/hwmon: Get rid of devm (rev2) Patchwork
2024-04-16 18:55 ` [PATCH v2] drm/i915/hwmon: Get rid of devm Rodrigo Vivi
2024-04-16 19:02 ` Dixit, Ashutosh
2024-04-16 19:15 ` Rodrigo Vivi
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=87wmoxzr92.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=W_Armin@gmx.de \
--cc=andi.shyti@intel.com \
--cc=ashutosh.dixit@intel.com \
--cc=badal.nilawar@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=ville.syrjala@linux.intel.com \
/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.