drivers/i2c/busses/i2c-mpc.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-)
Remove of_node_put from node_ctrl and node struct device_nodes.
Move the declaration to initialization for ensuring scope sanity.
Suggested-by: Julia Lawall <julia.lawall@inria.fr>
Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
---
drivers/i2c/busses/i2c-mpc.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
index 8d73c0f405ed..c4223556b3b8 100644
--- a/drivers/i2c/busses/i2c-mpc.c
+++ b/drivers/i2c/busses/i2c-mpc.c
@@ -304,13 +304,12 @@ static void mpc_i2c_setup_512x(struct device_node *node,
struct mpc_i2c *i2c,
u32 clock)
{
- struct device_node *node_ctrl;
void __iomem *ctrl;
u32 idx;
/* Enable I2C interrupts for mpc5121 */
- node_ctrl = of_find_compatible_node(NULL, NULL,
- "fsl,mpc5121-i2c-ctrl");
+ struct device_node *node_ctrl __free(device_node) =
+ of_find_compatible_node(NULL, NULL, "fsl,mpc5121-i2c-ctrl");
if (node_ctrl) {
ctrl = of_iomap(node_ctrl, 0);
if (ctrl) {
@@ -321,7 +320,6 @@ static void mpc_i2c_setup_512x(struct device_node *node,
setbits32(ctrl, 1 << (24 + idx * 2));
iounmap(ctrl);
}
- of_node_put(node_ctrl);
}
/* The clock setup for the 52xx works also fine for the 512x */
@@ -358,11 +356,11 @@ static const struct mpc_i2c_divider mpc_i2c_dividers_8xxx[] = {
static u32 mpc_i2c_get_sec_cfg_8xxx(void)
{
- struct device_node *node;
u32 __iomem *reg;
u32 val = 0;
- node = of_find_node_by_name(NULL, "global-utilities");
+ struct device_node *node __free(device_node) =
+ of_find_node_by_name(NULL, "global-utilities");
if (node) {
const u32 *prop = of_get_property(node, "reg", NULL);
if (prop) {
@@ -383,7 +381,6 @@ static u32 mpc_i2c_get_sec_cfg_8xxx(void)
iounmap(reg);
}
}
- of_node_put(node);
return val;
}
--
2.34.1
Hi
On Mon, 15 Apr 2024 16:12:20 +0000, Abhinav Jain wrote:
> Remove of_node_put from node_ctrl and node struct device_nodes.
> Move the declaration to initialization for ensuring scope sanity.
>
>
Applied to i2c/i2c-host on
git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git
Thank you,
Andi
Patches applied
===============
[1/1] i2c: mpc: Removal of of_node_put with __free for auto cleanup
commit: 24e4a0d7c6b7a6491cc44781f3900129f56f447f
On 16/04/24 04:12, Abhinav Jain wrote:
> Remove of_node_put from node_ctrl and node struct device_nodes.
> Move the declaration to initialization for ensuring scope sanity.
>
> Suggested-by: Julia Lawall <julia.lawall@inria.fr>
> Signed-off-by: Abhinav Jain <jain.abhinav177@gmail.com>
Reviewed-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> ---
> drivers/i2c/busses/i2c-mpc.c | 11 ++++-------
> 1 file changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
> index 8d73c0f405ed..c4223556b3b8 100644
> --- a/drivers/i2c/busses/i2c-mpc.c
> +++ b/drivers/i2c/busses/i2c-mpc.c
> @@ -304,13 +304,12 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> struct mpc_i2c *i2c,
> u32 clock)
> {
> - struct device_node *node_ctrl;
> void __iomem *ctrl;
> u32 idx;
>
> /* Enable I2C interrupts for mpc5121 */
> - node_ctrl = of_find_compatible_node(NULL, NULL,
> - "fsl,mpc5121-i2c-ctrl");
> + struct device_node *node_ctrl __free(device_node) =
> + of_find_compatible_node(NULL, NULL, "fsl,mpc5121-i2c-ctrl");
> if (node_ctrl) {
> ctrl = of_iomap(node_ctrl, 0);
> if (ctrl) {
> @@ -321,7 +320,6 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> setbits32(ctrl, 1 << (24 + idx * 2));
> iounmap(ctrl);
> }
> - of_node_put(node_ctrl);
> }
>
> /* The clock setup for the 52xx works also fine for the 512x */
> @@ -358,11 +356,11 @@ static const struct mpc_i2c_divider mpc_i2c_dividers_8xxx[] = {
>
> static u32 mpc_i2c_get_sec_cfg_8xxx(void)
> {
> - struct device_node *node;
> u32 __iomem *reg;
> u32 val = 0;
>
> - node = of_find_node_by_name(NULL, "global-utilities");
> + struct device_node *node __free(device_node) =
> + of_find_node_by_name(NULL, "global-utilities");
> if (node) {
> const u32 *prop = of_get_property(node, "reg", NULL);
> if (prop) {
> @@ -383,7 +381,6 @@ static u32 mpc_i2c_get_sec_cfg_8xxx(void)
> iounmap(reg);
> }
> }
> - of_node_put(node);
>
> return val;
> }
Hi Abhinav, > /* Enable I2C interrupts for mpc5121 */ > - node_ctrl = of_find_compatible_node(NULL, NULL, > - "fsl,mpc5121-i2c-ctrl"); > + struct device_node *node_ctrl __free(device_node) = How have you tested this? Andi
On 16/04/24 08:54, Andi Shyti wrote: > Hi Abhinav, > >> /* Enable I2C interrupts for mpc5121 */ >> - node_ctrl = of_find_compatible_node(NULL, NULL, >> - "fsl,mpc5121-i2c-ctrl"); >> + struct device_node *node_ctrl __free(device_node) = > How have you tested this? I'm not sure I know anyone that still has a mpc5121. Maybe someone on linuxppc-dev? I did try to take the patch for a spin on my T2081RDB but I'm having some userland issues on it for some reason (unrelated to this change). The kernel boot does discover a few peripherals hanging of the I2C interface but I'm not in a position to offer up a Tested-by and I've run out of time to debug why my board is unhappy.
Chris Packham <Chris.Packham@alliedtelesis.co.nz> writes: > On 16/04/24 08:54, Andi Shyti wrote: >> Hi Abhinav, >> >>> /* Enable I2C interrupts for mpc5121 */ >>> - node_ctrl = of_find_compatible_node(NULL, NULL, >>> - "fsl,mpc5121-i2c-ctrl"); >>> + struct device_node *node_ctrl __free(device_node) = >> How have you tested this? > > I'm not sure I know anyone that still has a mpc5121. Maybe someone on > linuxppc-dev? Not that I know of. The driver loads on my T4240, but doesn't hit the right paths to test this patch. No objection to it being merged though. cheers
Hi Chris, On Tue, Apr 16, 2024 at 03:59:13AM +0000, Chris Packham wrote: > On 16/04/24 08:54, Andi Shyti wrote: > >> /* Enable I2C interrupts for mpc5121 */ > >> - node_ctrl = of_find_compatible_node(NULL, NULL, > >> - "fsl,mpc5121-i2c-ctrl"); > >> + struct device_node *node_ctrl __free(device_node) = > > How have you tested this? > > I'm not sure I know anyone that still has a mpc5121. Maybe someone on > linuxppc-dev? that's why I was asking, this would be the first driver in i2c using Rob's __free(device_node). > I did try to take the patch for a spin on my T2081RDB but I'm having > some userland issues on it for some reason (unrelated to this change). > The kernel boot does discover a few peripherals hanging of the I2C > interface but I'm not in a position to offer up a Tested-by and I've run > out of time to debug why my board is unhappy. Thanks for giving it a try. Andi
On Tue, Apr 16, 2024 at 04:07:48PM +0200, Andi Shyti wrote: > On Tue, Apr 16, 2024 at 03:59:13AM +0000, Chris Packham wrote: > > On 16/04/24 08:54, Andi Shyti wrote: > > >> /* Enable I2C interrupts for mpc5121 */ > > >> - node_ctrl = of_find_compatible_node(NULL, NULL, > > >> - "fsl,mpc5121-i2c-ctrl"); > > >> + struct device_node *node_ctrl __free(device_node) = > > > How have you tested this? > > > > I'm not sure I know anyone that still has a mpc5121. Maybe someone on > > linuxppc-dev? > > that's why I was asking, this would be the first driver in i2c > using Rob's __free(device_node). Jonathan's, of course :-) Andi
© 2016 - 2026 Red Hat, Inc.