Re: [net-next PATCH v7 04/16] of: mdio: Refactor of_phy_find_device()

From: Daniel Thompson
Date: Tue Mar 16 2021 - 15:19:20 EST


On Thu, Mar 11, 2021 at 11:49:59AM +0530, Calvin Johnson wrote:
> Refactor of_phy_find_device() to use fwnode_phy_find_device().
>
> Signed-off-by: Calvin Johnson <calvin.johnson@xxxxxxxxxxx>

This patch series is provoking depmod dependency cycles for me and
it bisected down to this patch (although I think later patches in
the series add further cycles).

The problems emerge when running modules_install either directly or
indirectly via packaging rules such as bindeb-pkg.

~~~
make -j16 INSTALL_MOD_PATH=$PWD/modules modules_install
...
INSTALL sound/usb/misc/snd-ua101.ko
INSTALL sound/usb/snd-usb-audio.ko
INSTALL sound/usb/snd-usbmidi-lib.ko
INSTALL sound/xen/snd_xen_front.ko
DEPMOD 5.12.0-rc3-00009-g1fda33bf463d
depmod: ERROR: Cycle detected: fwnode_mdio -> of_mdio -> fwnode_mdio
depmod: ERROR: Found 2 modules in dependency cycles!
~~~

Kconfig can be found here:
https://gist.github.com/daniel-thompson/6a7d224f3d3950ffa3f63f979b636474

This Kconfig file is for a highly modular kernel derived from the Debian
5.10 arm64 kernel config. I was not able to reproduce using the defconfig
kernel for arm64.


Daniel.


> ---
>
> Changes in v7: None
> Changes in v6: None
> Changes in v5: None
> Changes in v4: None
> Changes in v3: None
> Changes in v2: None
>
> drivers/net/mdio/of_mdio.c | 13 +------------
> 1 file changed, 1 insertion(+), 12 deletions(-)
>
> diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c
> index d5e0970b2561..b5e0b5b22f1a 100644
> --- a/drivers/net/mdio/of_mdio.c
> +++ b/drivers/net/mdio/of_mdio.c
> @@ -360,18 +360,7 @@ EXPORT_SYMBOL(of_mdio_find_device);
> */
> struct phy_device *of_phy_find_device(struct device_node *phy_np)
> {
> - struct mdio_device *mdiodev;
> -
> - mdiodev = of_mdio_find_device(phy_np);
> - if (!mdiodev)
> - return NULL;
> -
> - if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
> - return to_phy_device(&mdiodev->dev);
> -
> - put_device(&mdiodev->dev);
> -
> - return NULL;
> + return fwnode_phy_find_device(of_fwnode_handle(phy_np));
> }
> EXPORT_SYMBOL(of_phy_find_device);
>