* [PATCH v2 0/4] pinctrl: free maps on DT mapping failures
@ 2026-10-03 8:31 Jiale Yao
2026-10-03 8:31 ` [PATCH v2 1/4] pinctrl: sprd: free maps on DT map failure Jiale Yao
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Jiale Yao @ 2026-10-03 8:31 UTC (permalink / raw)
To: Geert Uytterhoeven, Linus Walleij, Krzysztof Kozlowski,
Sylwester Nawrocki, Peter Griffin, Alim Akhtar, Orson Zhai,
Baolin Wang, Chunyan Zhang, Thierry Reding, Jonathan Hunter,
linux-renesas-soc, linux-gpio, linux-kernel, linux-arm-kernel,
linux-samsung-soc, linux-tegra
Cc: Jiale Yao
Several pinctrl drivers reserve map storage before appending mux and
configuration entries while translating device tree nodes. If a later
operation fails, their error paths free only temporary configuration data
and leave the partially built map allocated.
Commit 17007cd70060 ("pinctrl: generic: free maps on
pinctrl_generic_to_map() failure") fixed the same cleanup problem in the
generic mapping helper. These drivers use their own mapping callbacks and
need equivalent error handling.
Free the accumulated map on every failure path in the Spreadtrum, Renesas
RZ/N1, Tegra XUSB, and Samsung drivers. Each patch changes one driver and
remains independently buildable.
Changes in v2:
- Add the Fixes tag and Baolin's Reviewed-by tag to patch 1.
- Drop the unnecessary output parameter resets from all four patches and
update their commit messages accordingly.
Jiale Yao (4):
pinctrl: sprd: free maps on DT map failure
pinctrl: renesas: rzn1: free maps on DT map failure
pinctrl: tegra: xusb: free maps on DT map failure
pinctrl: samsung: free maps on DT map failure
drivers/pinctrl/renesas/pinctrl-rzn1.c | 8 ++++++--
drivers/pinctrl/samsung/pinctrl-samsung.c | 24 ++++++++++++++--------
drivers/pinctrl/sprd/pinctrl-sprd.c | 3 +++
drivers/pinctrl/tegra/pinctrl-tegra-xusb.c | 6 +++++-
4 files changed, 29 insertions(+), 12 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/4] pinctrl: sprd: free maps on DT map failure
2026-10-03 8:31 [PATCH v2 0/4] pinctrl: free maps on DT mapping failures Jiale Yao
@ 2026-10-03 8:31 ` Jiale Yao
2026-10-03 8:31 ` [PATCH v2 2/4] pinctrl: renesas: rzn1: " Jiale Yao
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Jiale Yao @ 2026-10-03 8:31 UTC (permalink / raw)
To: Linus Walleij, Orson Zhai, Baolin Wang, Chunyan Zhang,
linux-gpio, linux-kernel
Cc: Jiale Yao
sprd_dt_node_to_map() reserves map storage before adding mux and
configuration entries. If a later operation fails, the error path only
frees the temporary configurations and leaves the map allocation reachable
through the output pointer.
Free the partially built map on failure. The caller ignores the output
parameters when the mapping callback returns an error, so they do not need
to be reset after freeing the map.
Fixes: 41d32cfce1ae ("pinctrl: sprd: Add Spreadtrum pin control driver")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
---
drivers/pinctrl/sprd/pinctrl-sprd.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c
index 16cf9d15f247..a565d4fd4233 100644
--- a/drivers/pinctrl/sprd/pinctrl-sprd.c
+++ b/drivers/pinctrl/sprd/pinctrl-sprd.c
@@ -326,6 +326,9 @@ static int sprd_dt_node_to_map(struct pinctrl_dev *pctldev,
out:
kfree(configs);
+ if (ret < 0)
+ pinctrl_utils_free_map(pctldev, *map, *num_maps);
+
return ret;
}
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/4] pinctrl: renesas: rzn1: free maps on DT map failure
2026-10-03 8:31 [PATCH v2 0/4] pinctrl: free maps on DT mapping failures Jiale Yao
2026-10-03 8:31 ` [PATCH v2 1/4] pinctrl: sprd: free maps on DT map failure Jiale Yao
@ 2026-10-03 8:31 ` Jiale Yao
2026-10-03 8:31 ` [PATCH v2 3/4] pinctrl: tegra: xusb: " Jiale Yao
2026-10-03 8:31 ` [PATCH v2 4/4] pinctrl: samsung: " Jiale Yao
3 siblings, 0 replies; 5+ messages in thread
From: Jiale Yao @ 2026-10-03 8:31 UTC (permalink / raw)
To: Geert Uytterhoeven, Linus Walleij, linux-renesas-soc, linux-gpio,
linux-kernel
Cc: Jiale Yao
rzn1_dt_node_to_map_one() appends mappings for each DT node. If a
node fails after map storage has been reserved, the top-level callback
returns without releasing mappings built for the current and previous
nodes.
Free the accumulated map on every error path. The caller ignores the
output parameters when the mapping callback returns an error, so they do
not need to be reset after freeing the map.
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
drivers/pinctrl/renesas/pinctrl-rzn1.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/pinctrl/renesas/pinctrl-rzn1.c b/drivers/pinctrl/renesas/pinctrl-rzn1.c
index fb874867dbfb..64a89e307191 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzn1.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzn1.c
@@ -411,15 +411,19 @@ static int rzn1_dt_node_to_map(struct pinctrl_dev *pctldev,
ret = rzn1_dt_node_to_map_one(pctldev, np, map, num_maps);
if (ret < 0)
- return ret;
+ goto err_free_map;
for_each_child_of_node_scoped(np, child) {
ret = rzn1_dt_node_to_map_one(pctldev, child, map, num_maps);
if (ret < 0)
- return ret;
+ goto err_free_map;
}
return 0;
+
+err_free_map:
+ pinctrl_utils_free_map(pctldev, *map, *num_maps);
+ return ret;
}
static const struct pinctrl_ops rzn1_pctrl_ops = {
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 3/4] pinctrl: tegra: xusb: free maps on DT map failure
2026-10-03 8:31 [PATCH v2 0/4] pinctrl: free maps on DT mapping failures Jiale Yao
2026-10-03 8:31 ` [PATCH v2 1/4] pinctrl: sprd: free maps on DT map failure Jiale Yao
2026-10-03 8:31 ` [PATCH v2 2/4] pinctrl: renesas: rzn1: " Jiale Yao
@ 2026-10-03 8:31 ` Jiale Yao
2026-10-03 8:31 ` [PATCH v2 4/4] pinctrl: samsung: " Jiale Yao
3 siblings, 0 replies; 5+ messages in thread
From: Jiale Yao @ 2026-10-03 8:31 UTC (permalink / raw)
To: Linus Walleij, Thierry Reding, Jonathan Hunter,
Krzysztof Kozlowski, linux-gpio, linux-tegra, linux-kernel
Cc: Jiale Yao
tegra_xusb_padctl_parse_subnode() can append mappings before a later
child or configuration operation fails. The top-level callback currently
returns the error while retaining all mappings allocated for earlier
children.
Free the accumulated map on failure. The caller ignores the output
parameters when the mapping callback returns an error, so they do not need
to be reset after freeing the map.
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
drivers/pinctrl/tegra/pinctrl-tegra-xusb.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/tegra/pinctrl-tegra-xusb.c b/drivers/pinctrl/tegra/pinctrl-tegra-xusb.c
index c6a51bb21215..fb70f8aee56b 100644
--- a/drivers/pinctrl/tegra/pinctrl-tegra-xusb.c
+++ b/drivers/pinctrl/tegra/pinctrl-tegra-xusb.c
@@ -248,10 +248,14 @@ static int tegra_xusb_padctl_dt_node_to_map(struct pinctrl_dev *pinctrl,
&reserved_maps,
num_maps);
if (err < 0)
- return err;
+ goto err_free_map;
}
return 0;
+
+err_free_map:
+ pinctrl_utils_free_map(pinctrl, *maps, *num_maps);
+ return err;
}
static const struct pinctrl_ops tegra_xusb_padctl_pinctrl_ops = {
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 4/4] pinctrl: samsung: free maps on DT map failure
2026-10-03 8:31 [PATCH v2 0/4] pinctrl: free maps on DT mapping failures Jiale Yao
` (2 preceding siblings ...)
2026-10-03 8:31 ` [PATCH v2 3/4] pinctrl: tegra: xusb: " Jiale Yao
@ 2026-10-03 8:31 ` Jiale Yao
3 siblings, 0 replies; 5+ messages in thread
From: Jiale Yao @ 2026-10-03 8:31 UTC (permalink / raw)
To: Krzysztof Kozlowski, Sylwester Nawrocki, Peter Griffin,
Alim Akhtar, Linus Walleij, linux-arm-kernel, linux-samsung-soc,
linux-gpio, linux-kernel
Cc: Jiale Yao
samsung_dt_subnode_to_map() can reserve map storage before adding
configuration entries. The no-child path returns its error directly, and
the child path frees mappings on failure.
Use one error path that frees the accumulated map in both cases. The
caller ignores the output parameters when the mapping callback returns an
error, so they do not need to be reset after freeing the map.
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
drivers/pinctrl/samsung/pinctrl-samsung.c | 24 ++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c
index 5ecc9ed4c44d..0a1e6063fb5f 100644
--- a/drivers/pinctrl/samsung/pinctrl-samsung.c
+++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
@@ -259,22 +259,28 @@ static int samsung_dt_node_to_map(struct pinctrl_dev *pctldev,
*map = NULL;
*num_maps = 0;
- if (!of_get_child_count(np_config))
- return samsung_dt_subnode_to_map(drvdata, pctldev->dev,
- np_config, map,
- &reserved_maps,
- num_maps);
+ if (!of_get_child_count(np_config)) {
+ ret = samsung_dt_subnode_to_map(drvdata, pctldev->dev,
+ np_config, map, &reserved_maps,
+ num_maps);
+ if (ret < 0)
+ goto err_free_map;
+
+ return 0;
+ }
for_each_child_of_node_scoped(np_config, np) {
ret = samsung_dt_subnode_to_map(drvdata, pctldev->dev, np, map,
&reserved_maps, num_maps);
- if (ret < 0) {
- samsung_dt_free_map(pctldev, *map, *num_maps);
- return ret;
- }
+ if (ret < 0)
+ goto err_free_map;
}
return 0;
+
+err_free_map:
+ samsung_dt_free_map(pctldev, *map, *num_maps);
+ return ret;
}
#ifdef CONFIG_DEBUG_FS
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-03 8:32 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-03 8:31 [PATCH v2 0/4] pinctrl: free maps on DT mapping failures Jiale Yao
2026-10-03 8:31 ` [PATCH v2 1/4] pinctrl: sprd: free maps on DT map failure Jiale Yao
2026-10-03 8:31 ` [PATCH v2 2/4] pinctrl: renesas: rzn1: " Jiale Yao
2026-10-03 8:31 ` [PATCH v2 3/4] pinctrl: tegra: xusb: " Jiale Yao
2026-10-03 8:31 ` [PATCH v2 4/4] pinctrl: samsung: " Jiale Yao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®