* [PATCH] pinctrl: sophgo: allocate power_cfg with priv
@ 2026-04-30 22:04 Rosen Penev
2026-05-05 12:08 ` Linus Walleij
0 siblings, 1 reply; 2+ messages in thread
From: Rosen Penev @ 2026-04-30 22:04 UTC (permalink / raw)
To: linux-gpio
Cc: Linus Walleij, Chen Wang, Inochi Amaoto,
open list:SOPHGO DEVICETREES and DRIVERS, open list
Use a flexible array member to combine allocations and simplify code
slightly.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/pinctrl/sophgo/pinctrl-cv18xx.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/pinctrl/sophgo/pinctrl-cv18xx.c b/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
index c3a2dcf71f2a..154ba9a4f08c 100644
--- a/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
+++ b/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
@@ -27,8 +27,8 @@
#include "pinctrl-cv18xx.h"
struct cv1800_priv {
- u32 *power_cfg;
void __iomem *regs[2];
+ u32 power_cfg[];
};
static unsigned int cv1800_dt_get_pin_mux(u32 value)
@@ -417,15 +417,11 @@ static int cv1800_pinctrl_init(struct platform_device *pdev,
const struct sophgo_pinctrl_data *pctrl_data = pctrl->data;
struct cv1800_priv *priv;
- priv = devm_kzalloc(&pdev->dev, sizeof(struct cv1800_priv), GFP_KERNEL);
+ priv = devm_kzalloc(&pdev->dev, struct_size(priv, power_cfg, pctrl_data->npds),
+ GFP_KERNEL);
if (!priv)
return -ENOMEM;
- priv->power_cfg = devm_kcalloc(&pdev->dev, pctrl_data->npds,
- sizeof(u32), GFP_KERNEL);
- if (!priv->power_cfg)
- return -ENOMEM;
-
priv->regs[0] = devm_platform_ioremap_resource_byname(pdev, "sys");
if (IS_ERR(priv->regs[0]))
return PTR_ERR(priv->regs[0]);
--
2.54.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] pinctrl: sophgo: allocate power_cfg with priv
2026-04-30 22:04 [PATCH] pinctrl: sophgo: allocate power_cfg with priv Rosen Penev
@ 2026-05-05 12:08 ` Linus Walleij
0 siblings, 0 replies; 2+ messages in thread
From: Linus Walleij @ 2026-05-05 12:08 UTC (permalink / raw)
To: Rosen Penev, Gustavo A. R. Silva, Kees Cook
Cc: linux-gpio, Chen Wang, Inochi Amaoto,
open list:SOPHGO DEVICETREES and DRIVERS, open list
Hi Rosen,
thanks for your patch!
On Fri, May 1, 2026 at 12:04 AM Rosen Penev <rosenp@gmail.com> wrote:
> Use a flexible array member to combine allocations and simplify code
> slightly.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
I have applied the patch with the following augmentation:
iff --git a/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
b/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
index 154ba9a4f08c..59318a42690f 100644
--- a/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
+++ b/drivers/pinctrl/sophgo/pinctrl-cv18xx.c
@@ -27,8 +27,9 @@
#include "pinctrl-cv18xx.h"
struct cv1800_priv {
- void __iomem *regs[2];
- u32 power_cfg[];
+ void __iomem *regs[2];
+ unsigned int num_power_cfg;
+ u32 power_cfg[] __counted_by(num_power_cfg);
};
static unsigned int cv1800_dt_get_pin_mux(u32 value)
@@ -421,6 +422,7 @@ static int cv1800_pinctrl_init(struct platform_device *pdev,
GFP_KERNEL);
if (!priv)
return -ENOMEM;
+ priv->num_power_cfg = pctrl_data->npds;
priv->regs[0] = devm_platform_ioremap_resource_byname(pdev, "sys");
if (IS_ERR(priv->regs[0]))
I think this has been mentioned before?
Including a counter for dynamic arrays makes it possible for the
compiler to insert runtime checks akin to those that are used for
Pascal or Rust arrays making it harder for the arrays to be indexed
out of range.
Yours,
Linus Walleij
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-05-05 12:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-30 22:04 [PATCH] pinctrl: sophgo: allocate power_cfg with priv Rosen Penev
2026-05-05 12:08 ` Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox