On Fri, Apr 10, 2026 at 08:57:31PM -0700, Rosen Penev wrote:
> Use a flexible array member to combine allocations. Allows removal of a
> pointless branch. A size of 0 means phys are not allocated.
> 
> Add __counted_by for extra runtime analysis.
> 
> Signed-off-by: Rosen Penev <[email protected]>
> ---
>  drivers/usb/mtu3/mtu3.h      |  2 +-
>  drivers/usb/mtu3/mtu3_plat.c | 18 ++++++------------
>  2 files changed, 7 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h
> index ba5a63669e5f..d71849388602 100644
> --- a/drivers/usb/mtu3/mtu3.h
> +++ b/drivers/usb/mtu3/mtu3.h
> @@ -252,7 +252,6 @@ struct ssusb_mtk {
>       struct mtu3 *u3d;
>       void __iomem *mac_base;
>       void __iomem *ippc_base;
> -     struct phy **phys;
>       int num_phys;
>       int wakeup_irq;
>       /* common power & clock */
> @@ -272,6 +271,7 @@ struct ssusb_mtk {
>       struct regmap *uwk;
>       u32 uwk_reg_base;
>       u32 uwk_vers;
> +     struct phy *phys[] __counted_by(num_phys);
>  };
>  
>  /**
> diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c
> index cc8a864dbd63..11a919fc3d47 100644
> --- a/drivers/usb/mtu3/mtu3_plat.c
> +++ b/drivers/usb/mtu3/mtu3_plat.c
> @@ -240,17 +240,6 @@ static int get_ssusb_rscs(struct platform_device *pdev, 
> struct ssusb_mtk *ssusb)
>       if (ret)
>               return ret;
>  
> -     ssusb->num_phys = of_count_phandle_with_args(node,
> -                     "phys", "#phy-cells");
> -     if (ssusb->num_phys > 0) {
> -             ssusb->phys = devm_kcalloc(dev, ssusb->num_phys,
> -                                     sizeof(*ssusb->phys), GFP_KERNEL);
> -             if (!ssusb->phys)
> -                     return -ENOMEM;
> -     } else {
> -             ssusb->num_phys = 0;
> -     }
> -
>       for (i = 0; i < ssusb->num_phys; i++) {
>               ssusb->phys[i] = devm_of_phy_get_by_index(dev, node, i);
>               if (IS_ERR(ssusb->phys[i])) {
> @@ -330,12 +319,17 @@ static int mtu3_probe(struct platform_device *pdev)
>       struct device *dev = &pdev->dev;
>       struct ssusb_mtk *ssusb;
>       int ret = -ENOMEM;
> +     int num_phys;
>  
> +     num_phys = of_count_phandle_with_args(dev->of_node,
> +                     "phys", "#phy-cells");

You just caused a bug here if this returns a negative value.

How was this tested?

And why is it even needed?

thanks,

greg k-h

Reply via email to