2013.11.03. 9:16 keltezéssel, Catalin Patulea írta:
> In particular, phy_connect before register_netdev. This is because
> register_netdev runs the netdev notifiers, which can race with the rest of
> the initialization in ag71xx_probe. In my case this manifested in two ways:
> 
> 1) If ag71xx is compiled as a module and inserted after netifd has started,
>    netifd is notified by register_netdev before the call to
>    ag71xx_phy_connect. netifd tries to bring the interface up, which calls
>    ag71xx_open, which in turn enters ag71xx_phy_start. This keys off
>    ag->phy_dev (which is still NULL) and thinks this is a fixed-link board,
>    and enters ag71xx_link_adjust. This looks at ag->speed which is not yet
>    initialized and hits the BUG() in the switch (ag->speed) in
>    ag71xx_link_adjust.
> 
>    This is the wrong code path for ag71xx_phy_start - my board has PHYs that
>    need to be brought up with phy_start. Doing ag71xx_phy_connect before
>    register_netdev ensures that ag->phy_dev is non-NULL before
>    ag71xx_phy_start is ever called.
> 
> 2) When ag71xx is built into the kernel, and netconsole is enabled, there
>    is a gap in the initial burst of replayed printks right after the netdev
>    comes up. My assumption is that netconsole is also triggered by a netdev
>    notifier, and part of this printk burst happens before the call into
>    ag71xx_phy_connect, so part of the burst is lost while the PHY comes up.
>    This patch fixes the gap - all the printks before eth0 comes up are bursted
>    in full when netconsole initializes.
> 
> ag71xx_phy_connect_xxx no longer runs with a registered netdev, so the
> logging has been adjusted accordingly to avoid "unregistered net_device" or
> "eth%d" messages in dmesg.
> 
> Signed-off-by: Catalin Patulea <c...@vv.carleton.ca>

Applied.

Thanks,
Gabor
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to