Re: [PATCH net-next RFC V1 2/5] net: phy: Move time stamping interface into the generic mdio layer.

Richard Cochran
2018-03-24T16:59:16Z

On Wed, Mar 21, 2018 at 02:45:13PM -0700, Richard Cochran wrote:
> On Wed, Mar 21, 2018 at 12:10:07PM -0700, Florian Fainelli wrote:
> > > + phydev->mdio.ts_info = dp83640_ts_info;
> > > + phydev->mdio.hwtstamp = dp83640_hwtstamp;
> > > + phydev->mdio.rxtstamp = dp83640_rxtstamp;
> > > + phydev->mdio.txtstamp = dp83640_txtstamp;
> >
> > Why is this implemented a the mdio_device level and not at the
> > mdio_driver level? This looks like the wrong level at which this is done.
>
> The question could be asked of:
>
> struct mdio_device {
> int (*bus_match)(struct device *dev, struct device_driver *drv);
> void (*device_free)(struct mdio_device *mdiodev);
> void (*device_remove)(struct mdio_device *mdiodev);
> }
>
> I saw how this is done for the phy, etc, but I don't see any benefit
> of doing it that way. It would add an extra layer (or two) of
> indirection and save the space four pointer functions. Is that
> trade-off worth it?

Actually, there was another reason not to put these methods into the
driver structure. In contrast to phy_device, mdio_device doesn't have
a pointer to the driver structure. It looks like there is no way to
start from a mdio_device and get to a mdio_driver. Please correct me
if I'm wrong.

I propose keeping those methods in the mdio_device, wrapping them in
#ifdef CONFIG_NETWORK_PHY_TIMESTAMPING. That way, they do not add any
burden to the vast majority of users.

Thoughts?

Thanks,
Richard