Marco Pagani 1da11f8220
fpga: bridge: add owner module and take its refcount
The current implementation of the fpga bridge assumes that the low-level
module registers a driver for the parent device and uses its owner pointer
to take the module's refcount. This approach is problematic since it can
lead to a null pointer dereference while attempting to get the bridge if
the parent device does not have a driver.

To address this problem, add a module owner pointer to the fpga_bridge
struct and use it to take the module's refcount. Modify the function for
registering a bridge to take an additional owner module parameter and
rename it to avoid conflicts. Use the old function name for a helper macro
that automatically sets the module that registers the bridge as the owner.
This ensures compatibility with existing low-level control modules and
reduces the chances of registering a bridge without setting the owner.

Also, update the documentation to keep it consistent with the new interface
for registering an fpga bridge.

Other changes: opportunistically move put_device() from __fpga_bridge_get()
to fpga_bridge_get() and of_fpga_bridge_get() to improve code clarity since
the bridge device is taken in these functions.

Fixes: 21aeda950c5f ("fpga: add fpga bridge framework")
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Suggested-by: Xu Yilun <yilun.xu@intel.com>
Reviewed-by: Russ Weight <russ.weight@linux.dev>
Signed-off-by: Marco Pagani <marpagan@redhat.com>
Acked-by: Xu Yilun <yilun.xu@intel.com>
Link: https://lore.kernel.org/r/20240322171839.233864-1-marpagan@redhat.com
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
2024-03-31 21:54:44 +08:00
..
2024-03-13 18:34:05 -07:00
2024-03-21 13:34:15 -07:00
2024-03-22 12:46:07 -07:00
2024-03-07 21:52:03 +00:00
2024-03-19 11:57:26 -07:00
2024-03-18 15:11:44 -07:00
2024-03-15 11:58:32 -07:00
2024-03-07 20:37:04 +00:00
2024-03-15 12:25:13 -07:00
2024-03-24 13:54:06 -07:00
2024-03-21 19:04:31 -07:00
2024-03-14 09:56:15 -07:00
2024-03-21 10:01:02 -07:00
2024-03-18 15:34:03 -07:00
2024-03-06 14:03:31 +00:00
2024-03-24 10:45:31 -07:00
2024-03-07 20:32:47 +00:00
2024-03-07 20:26:24 -08:00
2024-03-15 17:53:48 -07:00
2024-03-18 17:30:46 +00:00
2024-03-13 10:59:28 -07:00
2024-03-21 12:44:10 -07:00
2024-03-23 08:43:21 -07:00
2024-03-18 17:30:46 +00:00
2024-03-07 20:32:38 +00:00
2024-03-23 08:43:21 -07:00
2024-03-15 11:58:32 -07:00
2024-03-21 13:23:07 -06:00
2024-03-21 13:34:15 -07:00
2024-03-14 10:58:27 -07:00
2024-03-21 12:35:20 -07:00
2024-03-16 11:24:51 -07:00
2024-03-13 11:33:10 -07:00
2024-03-12 17:44:08 -07:00
2024-03-22 09:52:37 -07:00
2024-03-21 10:37:39 -07:00
2024-03-21 17:16:46 -07:00
2024-03-22 13:31:07 -07:00
2024-03-21 15:18:18 -07:00
2024-03-15 12:22:52 -07:00
2024-03-22 09:57:00 -07:00
2024-03-16 16:31:12 -07:00
2024-03-12 10:35:24 -07:00
2024-03-21 12:44:10 -07:00
2024-03-16 16:31:12 -07:00
2024-03-21 12:35:20 -07:00
2024-03-15 13:21:13 -07:00
2024-03-19 08:57:39 -07:00
2024-03-17 12:06:10 -07:00
2024-03-19 08:48:09 -07:00