]> git.dujemihanovic.xyz Git - linux.git/commitdiff
soundwire: fix usages of device_get_named_child_node()
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Mon, 29 Apr 2024 00:49:35 +0000 (00:49 +0000)
committerVinod Koul <vkoul@kernel.org>
Mon, 3 Jun 2024 12:05:24 +0000 (17:35 +0530)
The documentation for device_get_named_child_node() mentions this
important point:

"
The caller is responsible for calling fwnode_handle_put() on the
returned fwnode pointer.
"

Add fwnode_handle_put() to avoid leaked references.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20240429004935.2400191-1-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/amd_manager.c
drivers/soundwire/intel_auxdevice.c
drivers/soundwire/mipi_disco.c

index 20d94bcfc9b4fbc292139a775a90b0f936a9ddbb..795e223f7e5c29b6b1d69b5f66fa32bc0ab50fba 100644 (file)
@@ -571,6 +571,9 @@ static int sdw_master_read_amd_prop(struct sdw_bus *bus)
        amd_manager->wake_en_mask = wake_en_mask;
        fwnode_property_read_u32(link, "amd-sdw-power-mode", &power_mode_mask);
        amd_manager->power_mode_mask = power_mode_mask;
+
+       fwnode_handle_put(link);
+
        return 0;
 }
 
index 17cf27e6ea738c3e2c126437c99cf863f036c97f..18517121cc8981c49fd484fadd74339479d6f61d 100644 (file)
@@ -155,8 +155,10 @@ static int sdw_master_read_intel_prop(struct sdw_bus *bus)
                SDW_MASTER_QUIRKS_CLEAR_INITIAL_PARITY;
 
        intel_prop = devm_kzalloc(bus->dev, sizeof(*intel_prop), GFP_KERNEL);
-       if (!intel_prop)
+       if (!intel_prop) {
+               fwnode_handle_put(link);
                return -ENOMEM;
+       }
 
        /* initialize with hardware defaults, in case the properties are not found */
        intel_prop->doaise = 0x1;
@@ -184,6 +186,8 @@ static int sdw_master_read_intel_prop(struct sdw_bus *bus)
                intel_prop->dodse,
                intel_prop->dods);
 
+       fwnode_handle_put(link);
+
        return 0;
 }
 
index 55a9c51c84c19adf65e1a82391dfbadff675b8b4..e5d9df26d4dc95d439ffc287f247086708145dfe 100644 (file)
@@ -66,8 +66,10 @@ int sdw_master_read_prop(struct sdw_bus *bus)
                prop->clk_freq = devm_kcalloc(bus->dev, prop->num_clk_freq,
                                              sizeof(*prop->clk_freq),
                                              GFP_KERNEL);
-               if (!prop->clk_freq)
+               if (!prop->clk_freq) {
+                       fwnode_handle_put(link);
                        return -ENOMEM;
+               }
 
                fwnode_property_read_u32_array(link,
                                "mipi-sdw-clock-frequencies-supported",
@@ -92,8 +94,10 @@ int sdw_master_read_prop(struct sdw_bus *bus)
                prop->clk_gears = devm_kcalloc(bus->dev, prop->num_clk_gears,
                                               sizeof(*prop->clk_gears),
                                               GFP_KERNEL);
-               if (!prop->clk_gears)
+               if (!prop->clk_gears) {
+                       fwnode_handle_put(link);
                        return -ENOMEM;
+               }
 
                fwnode_property_read_u32_array(link,
                                               "mipi-sdw-supported-clock-gears",
@@ -116,6 +120,8 @@ int sdw_master_read_prop(struct sdw_bus *bus)
        fwnode_property_read_u32(link, "mipi-sdw-command-error-threshold",
                                 &prop->err_threshold);
 
+       fwnode_handle_put(link);
+
        return 0;
 }
 EXPORT_SYMBOL(sdw_master_read_prop);
@@ -197,8 +203,10 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
                                                    dpn[i].num_words,
                                                    sizeof(*dpn[i].words),
                                                    GFP_KERNEL);
-                       if (!dpn[i].words)
+                       if (!dpn[i].words) {
+                               fwnode_handle_put(node);
                                return -ENOMEM;
+                       }
 
                        fwnode_property_read_u32_array(node,
                                        "mipi-sdw-port-wordlength-configs",
@@ -236,8 +244,10 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
                                                       dpn[i].num_channels,
                                                       sizeof(*dpn[i].channels),
                                                 GFP_KERNEL);
-                       if (!dpn[i].channels)
+                       if (!dpn[i].channels) {
+                               fwnode_handle_put(node);
                                return -ENOMEM;
+                       }
 
                        fwnode_property_read_u32_array(node,
                                        "mipi-sdw-channel-number-list",
@@ -251,8 +261,10 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
                                        dpn[i].num_ch_combinations,
                                        sizeof(*dpn[i].ch_combinations),
                                        GFP_KERNEL);
-                       if (!dpn[i].ch_combinations)
+                       if (!dpn[i].ch_combinations) {
+                               fwnode_handle_put(node);
                                return -ENOMEM;
+                       }
 
                        fwnode_property_read_u32_array(node,
                                        "mipi-sdw-channel-combination-list",
@@ -274,6 +286,8 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
 
                /* TODO: Read audio mode */
 
+               fwnode_handle_put(node);
+
                i++;
        }
 
@@ -348,10 +362,14 @@ int sdw_slave_read_prop(struct sdw_slave *slave)
                prop->dp0_prop = devm_kzalloc(&slave->dev,
                                              sizeof(*prop->dp0_prop),
                                              GFP_KERNEL);
-               if (!prop->dp0_prop)
+               if (!prop->dp0_prop) {
+                       fwnode_handle_put(port);
                        return -ENOMEM;
+               }
 
                sdw_slave_read_dp0(slave, port, prop->dp0_prop);
+
+               fwnode_handle_put(port);
        }
 
        /*