Re: [PATCH 31/31] ASoC: SOF: Use auto-cleanup for firmware loading
Takashi Iwai <[email protected]> Thu, 06 Aug 2026 15:18:26 +0200
| Newsgroups | org.kernel.vger.linux-sound |
|---|---|
| Message-ID | <[email protected]> |
On Thu, 06 Aug 2026 15:04:33 +0200,
Péter Ujfalusi wrote:
>
>
>
> On 06/08/2026 15:06, Takashi Iwai wrote:
> >>> - fw_filename = kasprintf(GFP_KERNEL, "%s/%s", profile->fw_path,
> >>> - profile->fw_name);
> >>> + const char *fw_filename __free(kfree) =
> >>> + kasprintf(GFP_KERNEL, "%s/%s", profile->fw_path,
> >>> + profile->fw_name);
> >>> if (!fw_filename)
> >>> return -ENOMEM;
> >>>
> >>> + const struct firmware *fw __free(firmware) = NULL;
> >>
> >> can we keep this at the head of the function?
> >
> > We can, but for the auto-cleaned stuff, it's rather recommended to put
> > the declaration at the position that actually starts using it. Then
> > you can avoid the unnecessary handling of the auto-cleanup.
>
> The only mention I have seen is the header and it does say that one
> should avoid having the declaration and allocation split _if_ the
> pointer is not initialzied, or do it in one line.
>
> Where it will get a bit blurry is when you have
> {
> const struct firmware *fw __free(firmware) = NULL;
>
> ...
> ret = something_which_might_fail();
> if (ret)
> goto out;
>
> ret = request_firmware();
> }
>
> out:
> ...
Yes, and we hits this in a couple patches in this series, and the
workaround is to declare at the beginning.
(One can say that moving the declaration *is* helpful to catch such a
corner case :)
> > (I don't find whether it's mentioned, though; the documentation about
> > the auto-cleanup isn't well organized yet, unfortunately...)
>
> OK, let's leave it as it is, my ack and tested tag still stands ;)
Thanks!
Takashi