Thread (17 messages) 17 messages, 4 authors, 2020-11-23

Re: [PATCH v4 01/11] firmware: raspberrypi: Keep count of all consumers

From: Andy Shevchenko <hidden>
Date: 2020-11-12 17:51:27
Also in: linux-clk, linux-devicetree, linux-gpio, linux-input, linux-pwm, lkml

On Thu, Nov 12, 2020 at 6:40 PM Nicolas Saenz Julienne
[off-list ref] wrote:
When unbinding the firmware device we need to make sure it has no
consumers left. Otherwise we'd leave them with a firmware handle
pointing at freed memory.

Keep a reference count of all consumers and introduce rpi_firmware_put()
which will permit automatically decrease the reference count upon
unbinding consumer drivers.
...
 /**
- * rpi_firmware_get - Get pointer to rpi_firmware structure.
  * @firmware_node:    Pointer to the firmware Device Tree node.
  *
+ * The reference to rpi_firmware has to be released with rpi_firmware_put().
+ *
  * Returns NULL is the firmware device is not ready.
  */
 struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node)
 {
        struct platform_device *pdev = of_find_device_by_node(firmware_node);
+       struct rpi_firmware *fw;

        if (!pdev)
                return NULL;

-       return platform_get_drvdata(pdev);
+       fw = platform_get_drvdata(pdev);
+       if (!fw)
+               return NULL;
+
+       if (!kref_get_unless_zero(&fw->consumers))
+               return NULL;
Don't we have a more traditional way of doing this, i.e.
try_module_get() coupled with get_device() ?
+       return fw;
 }

-- 
With Best Regards,
Andy Shevchenko

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help