[PATCH] soc: brcmstb: pm: Add of_node_put() when the iteration breaks

Liang He windhl at 126.com
Tue Jul 5 05:18:19 PDT 2022


At 2022-07-05 19:54:05, "Arnd Bergmann" <arnd at arndb.de> wrote:
>On Tue, Jul 5, 2022 at 1:28 PM Liang He <windhl at 126.com> wrote:
>> --- a/drivers/soc/bcm/brcmstb/pm/pm-arm.c
>> +++ b/drivers/soc/bcm/brcmstb/pm/pm-arm.c
>> @@ -732,11 +732,13 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
>>                 i = ctrl.num_memc;
>>                 if (i >= MAX_NUM_MEMC) {
>>                         pr_warn("too many MEMCs (max %d)\n", MAX_NUM_MEMC);
>> +                       of_node_put(dn);
>>                         break;
>>                 }
>>
>>                 base = of_io_request_and_map(dn, 0, dn->full_name);
>>                 if (IS_ERR(base)) {
>> +                       of_node_put(dn);
>>                         if (!ctrl.support_warm_boot)
>>                                 break;
>>
>> @@ -752,12 +754,14 @@ static int brcmstb_pm_probe(struct platform_device *pdev)
>>         for_each_matching_node(dn, brcmstb_memc_of_match) {
>>                 base = of_iomap(dn, 0);
>>                 if (!base) {
>> +                       of_node_put(dn);
>>                         pr_err("error mapping DDR Sequencer %d\n", i);
>>                         return -ENOMEM;
>>                 }
>>
>>                 of_id = of_match_node(brcmstb_memc_of_match, dn);
>>                 if (!of_id) {
>> +                       of_node_put(dn);
>>                         iounmap(base);
>>                         return -EINVAL;
>>                 }
>
>While all of these changes look correct to me, there seems to be a
>larger issue in the error handling for these loops, as they also leak
>the __iomem token returned by of_iomap()/of_io_request_and_map()
>and by the earlier calls from this function.
>
>Can you try to rework the unwinding to address those as well?
>
>       Arnd

Hi, Arnd

Thanks very much for your reply and your advice.

I would like to give more useful patching work, but now I have only learned
the 'device_node' related OF APIs.

It will be easies if you could provide a special case to teach me how to patch
of_io_xx related bugs or just a related  link in lore.kernel.org.

Thanks again,

Liang 




More information about the linux-arm-kernel mailing list