On Mon, 3 Oct 2022 12:51:51 +0200 Jiri Pirko wrote: > Currently, the info about linkage from netdev to the related > devlink_port instance is done using ndo_get_devlink_port(). > This is not sufficient, as it is up to the driver to implement it and > some of them don't do that. Also it leads to a lot of unnecessary > boilerplate code in all the drivers. > > Instead of that, introduce a possibility for driver to expose this > relationship by new SET_NETDEV_DEVLINK_PORT macro which stores it into > dev->devlink_port. It is ensured by the driver init/fini flows that > the devlink_port pointer does not change during the netdev lifetime. > Devlink port is always registered before netdev register and > unregistered after netdev unregister. > > Benefit from this linkage setup and remove explicit calls from driver > to devlink_port_type_eth_set() and clear(). Many of the driver > didn't use it correctly anyway. Let the devlink.c to track associated > netdev events and adjust type and type pointer accordingly. Also > use this events to to keep track on ifname change and remove RTNL lock > taking from devlink_nl_port_fill(). > > Finally, remove the ndo_get_devlink_port() ndo which is no longer used > and expose devlink_port handle as a new netdev netlink attribute to the > user. That way, during the ifname->devlink_port lookup, userspace app > does not have to dump whole devlink port list and instead it can just > do a simple RTM_GETLINK query. Would you be okay if we deferred until 6.2? It's technically past the deadline and some odd driver could regress.