]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: typec: intel_pmc_mux: combine kzalloc + kcalloc
authorRosen Penev <rosenp@gmail.com>
Sat, 25 Apr 2026 01:42:01 +0000 (18:42 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Apr 2026 16:17:52 +0000 (10:17 -0600)
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 <rosenp@gmail.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://patch.msgid.link/20260425014201.439251-1-rosenp@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/mux/intel_pmc_mux.c

index 1698428654abbe6fefb9f7c700e782bff251e216..e22b070a140f9aa96b449926bbf1280f069294e7 100644 (file)
@@ -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;