On Fri, Apr 24, 2026 at 06:42:01PM -0700, Rosen Penev wrote:
> A flexible array member can be used to combine allocations and simplify
> handling slightly.
> 
> Add __counted_by for extra runtime analysis.
> 
> Signed-off-by: Rosen Penev <[email protected]>

Reviewed-by: Heikki Krogerus <[email protected]>

> ---
>  drivers/usb/typec/mux/intel_pmc_mux.c | 19 +++++++++----------
>  1 file changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c 
> b/drivers/usb/typec/mux/intel_pmc_mux.c
> index 1698428654ab..e22b070a140f 100644
> --- a/drivers/usb/typec/mux/intel_pmc_mux.c
> +++ b/drivers/usb/typec/mux/intel_pmc_mux.c
> @@ -151,13 +151,14 @@ struct pmc_usb {
>       u8 num_ports;
>       struct device *dev;
>       struct intel_scu_ipc_dev *ipc;
> -     struct pmc_usb_port *port;
>       struct acpi_device *iom_adev;
>       void __iomem *iom_base;
>       u32 iom_port_status_offset;
>       u8 iom_port_status_size;
>  
>       struct dentry *dentry;
> +
> +     struct pmc_usb_port port[] __counted_by(num_ports);
>  };
>  
>  static struct dentry *pmc_mux_debugfs_root;
> @@ -731,27 +732,25 @@ static int pmc_usb_probe(struct platform_device *pdev)
>  {
>       struct fwnode_handle *fwnode = NULL;
>       struct pmc_usb *pmc;
> +     u8 num_ports;
>       int i = 0;
>       int ret;
>  
> -     pmc = devm_kzalloc(&pdev->dev, sizeof(*pmc), GFP_KERNEL);
> -     if (!pmc)
> -             return -ENOMEM;
> -
>       device_for_each_child_node(&pdev->dev, fwnode)
> -             pmc->num_ports++;
> +             num_ports++;
>  
>       /* The IOM microcontroller has a limitation of max 4 ports. */
> -     if (pmc->num_ports > 4) {
> +     if (num_ports > 4) {
>               dev_err(&pdev->dev, "driver limited to 4 ports\n");
>               return -ERANGE;
>       }
>  
> -     pmc->port = devm_kcalloc(&pdev->dev, pmc->num_ports,
> -                              sizeof(struct pmc_usb_port), GFP_KERNEL);
> -     if (!pmc->port)
> +     pmc = devm_kzalloc(&pdev->dev, struct_size(pmc, port, num_ports), 
> GFP_KERNEL);
> +     if (!pmc)
>               return -ENOMEM;
>  
> +     pmc->num_ports = num_ports;
> +
>       pmc->ipc = devm_intel_scu_ipc_dev_get(&pdev->dev);
>       if (!pmc->ipc)
>               return -EPROBE_DEFER;
> -- 
> 2.54.0

-- 
heikki

Reply via email to