From: "Liang He" <windhl@126.com>
To: Claudiu.Beznea@microchip.com
Cc: mturquette@baylibre.com, sboyd@kernel.org,
Nicolas.Ferre@microchip.com, alexandre.belloni@bootlin.com,
linux-clk@vger.kernel.org
Subject: Re:Re: [PATCH] clk/at91: Hold reference returned by of_get_parent()
Date: Mon, 27 Jun 2022 18:32:24 +0800 (CST) [thread overview]
Message-ID: <1c40621.78fc.181a4b8363c.Coremail.windhl@126.com> (raw)
In-Reply-To: <d5813a73-c41a-8f6e-c917-fe9be2cea32a@microchip.com>
At 2022-06-27 17:05:18, Claudiu.Beznea@microchip.com wrote:
>Hi, Liang,
>
>Patch title should be something like "clk: at91: dt-compat: <you message>"
>
Thanks, I am preparing the version-2 patch code and I will change all similar clk bugs commit title
using above format.
>
>On 24.06.2022 13:59, Liang He wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>
>> We need to hold the reference returned by of_get_parent() and use
>> it to call of_node_put() for refcount balance.
>>
>> Fixes: 62061d357c7f ("clk: at91: move DT compatibility code to its own file")
>> Signed-off-by: Liang He <windhl@126.com>
>> ---
>> these bugs are found in 5.19rc2
>> these bugs are confirmed not fixed by lore.kernel.org
>> these bugs are compiled tested in 5.19rc2 with at91_dt_defconfig
>>
>> drivers/clk/at91/dt-compat.c | 108 +++++++++++++++++++++++++++--------
>> 1 file changed, 84 insertions(+), 24 deletions(-)
>>
>> diff --git a/drivers/clk/at91/dt-compat.c b/drivers/clk/at91/dt-compat.c
>> index 8ca8bcacf66d..cc34141864bd 100644
>> --- a/drivers/clk/at91/dt-compat.c
>> +++ b/drivers/clk/at91/dt-compat.c
>> @@ -33,8 +33,11 @@ static void __init of_sama5d2_clk_audio_pll_frac_setup(struct device_node *np)
>> const char *name = np->name;
>> const char *parent_name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>
>What tp stands for?
I only want to use it to mean 'tmp_pointer', but Martin advises to
use 'parent_np'.
I will chose to use 'parent_np' in my version-2 patch, and how do you
think about this name?
Thanks very much for reviewing my patch code.
Liang
>
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -56,8 +59,11 @@ static void __init of_sama5d2_clk_audio_pll_pad_setup(struct device_node *np)
>> const char *name = np->name;
>> const char *parent_name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -79,8 +85,11 @@ static void __init of_sama5d2_clk_audio_pll_pmc_setup(struct device_node *np)
>> const char *name = np->name;
>> const char *parent_name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -120,7 +129,7 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
>> struct clk_hw *hw;
>> unsigned int num_parents;
>> const char *parent_names[GENERATED_SOURCE_MAX];
>> - struct device_node *gcknp;
>> + struct device_node *gcknp, *tp;
>> struct clk_range range = CLK_RANGE(0, 0);
>> struct regmap *regmap;
>>
>> @@ -134,7 +143,9 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
>> if (!num || num > PERIPHERAL_MAX)
>> return;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -180,8 +191,11 @@ static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
>> const char *name = np->name;
>> const char *parent_name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -243,12 +257,15 @@ static void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np)
>> const char *parent_name;
>> struct regmap *regmap;
>> bool bypass;
>> + struct device_node *tp;
>>
>> of_property_read_string(np, "clock-output-names", &name);
>> bypass = of_property_read_bool(np, "atmel,osc-bypass");
>> parent_name = of_clk_get_parent_name(np, 0);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -268,12 +285,15 @@ static void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np)
>> u32 accuracy = 0;
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> of_property_read_string(np, "clock-output-names", &name);
>> of_property_read_u32(np, "clock-frequency", &frequency);
>> of_property_read_u32(np, "clock-accuracy", &accuracy);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -292,11 +312,14 @@ static void __init of_at91rm9200_clk_main_setup(struct device_node *np)
>> const char *parent_name;
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> parent_name = of_clk_get_parent_name(np, 0);
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -316,13 +339,16 @@ static void __init of_at91sam9x5_clk_main_setup(struct device_node *np)
>> unsigned int num_parents;
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> num_parents = of_clk_get_parent_count(np);
>> if (num_parents == 0 || num_parents > 2)
>> return;
>>
>> of_clk_parent_fill(np, parent_names, num_parents);
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -373,6 +399,7 @@ of_at91_clk_master_setup(struct device_node *np,
>> const char *name = np->name;
>> struct clk_master_characteristics *characteristics;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> num_parents = of_clk_get_parent_count(np);
>> if (num_parents == 0 || num_parents > MASTER_SOURCE_MAX)
>> @@ -386,7 +413,9 @@ of_at91_clk_master_setup(struct device_node *np,
>> if (!characteristics)
>> return;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -433,6 +462,7 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
>> const char *name;
>> struct device_node *periphclknp;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> parent_name = of_clk_get_parent_name(np, 0);
>> if (!parent_name)
>> @@ -442,7 +472,9 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
>> if (!num || num > PERIPHERAL_MAX)
>> return;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -602,6 +634,7 @@ of_at91_clk_pll_setup(struct device_node *np,
>> const char *parent_name;
>> const char *name = np->name;
>> struct clk_pll_characteristics *characteristics;
>> + struct device_node *tp;
>>
>> if (of_property_read_u32(np, "reg", &id))
>> return;
>> @@ -610,7 +643,9 @@ of_at91_clk_pll_setup(struct device_node *np,
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -665,12 +700,15 @@ of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
>> const char *parent_name;
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> parent_name = of_clk_get_parent_name(np, 0);
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -694,7 +732,7 @@ of_at91_clk_prog_setup(struct device_node *np,
>> unsigned int num_parents;
>> const char *parent_names[PROG_SOURCE_MAX];
>> const char *name;
>> - struct device_node *progclknp;
>> + struct device_node *progclknp, *tp;
>> struct regmap *regmap;
>>
>> num_parents = of_clk_get_parent_count(np);
>> @@ -707,7 +745,9 @@ of_at91_clk_prog_setup(struct device_node *np,
>> if (!num || num > (PROG_ID_MAX + 1))
>> return;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -756,13 +796,16 @@ static void __init of_at91sam9260_clk_slow_setup(struct device_node *np)
>> unsigned int num_parents;
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> num_parents = of_clk_get_parent_count(np);
>> if (num_parents != 2)
>> return;
>>
>> of_clk_parent_fill(np, parent_names, num_parents);
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -788,6 +831,7 @@ static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
>> const char *parent_names[SMD_SOURCE_MAX];
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> num_parents = of_clk_get_parent_count(np);
>> if (num_parents == 0 || num_parents > SMD_SOURCE_MAX)
>> @@ -797,7 +841,9 @@ static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -818,7 +864,7 @@ static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
>> u32 id;
>> struct clk_hw *hw;
>> const char *name;
>> - struct device_node *sysclknp;
>> + struct device_node *sysclknp, *tp;
>> const char *parent_name;
>> struct regmap *regmap;
>>
>> @@ -826,7 +872,9 @@ static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
>> if (num > (SYSTEM_MAX_ID + 1))
>> return;
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -859,6 +907,7 @@ static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
>> const char *parent_names[USB_SOURCE_MAX];
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> num_parents = of_clk_get_parent_count(np);
>> if (num_parents == 0 || num_parents > USB_SOURCE_MAX)
>> @@ -868,7 +917,9 @@ static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -888,6 +939,7 @@ static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>> const char *parent_name;
>> const char *name = np->name;
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> parent_name = of_clk_get_parent_name(np, 0);
>> if (!parent_name)
>> @@ -895,7 +947,9 @@ static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>>
>> @@ -915,6 +969,7 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
>> const char *name = np->name;
>> u32 divisors[4] = {0, 0, 0, 0};
>> struct regmap *regmap;
>> + struct device_node *tp;
>>
>> parent_name = of_clk_get_parent_name(np, 0);
>> if (!parent_name)
>> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap))
>> return;
>> hw = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
>> @@ -946,12 +1003,15 @@ static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
>> const char *parent_name;
>> const char *name = np->name;
>> struct regmap *regmap_pmc, *regmap_sfr;
>> + struct device_node *tp;
>>
>> parent_name = of_clk_get_parent_name(np, 0);
>>
>> of_property_read_string(np, "clock-output-names", &name);
>>
>> - regmap_pmc = syscon_node_to_regmap(of_get_parent(np));
>> + tp = of_get_parent(np);
>> + regmap_pmc = syscon_node_to_regmap(tp);
>> + of_node_put(tp);
>> if (IS_ERR(regmap_pmc))
>> return;
>>
>> --
>> 2.25.1
>>
>
next prev parent reply other threads:[~2022-06-27 10:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-24 10:59 [PATCH] clk/at91: Hold reference returned by of_get_parent() Liang He
2022-06-27 9:05 ` Claudiu.Beznea
2022-06-27 10:32 ` Liang He [this message]
2022-06-27 10:36 ` Claudiu.Beznea
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=1c40621.78fc.181a4b8363c.Coremail.windhl@126.com \
--to=windhl@126.com \
--cc=Claudiu.Beznea@microchip.com \
--cc=Nicolas.Ferre@microchip.com \
--cc=alexandre.belloni@bootlin.com \
--cc=linux-clk@vger.kernel.org \
--cc=mturquette@baylibre.com \
--cc=sboyd@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox