> > +static int qede_ptp_adjfreq(struct ptp_clock_info *info, s32 ppb) {
> > + struct qede_ptp *ptp = container_of(info, struct qede_ptp,
> clock_info);
> > + struct qede_dev *edev = ptp->edev;
> > + int rc;
> > +
> > + __qede_lock(edev);
> > + if (edev->state == QEDE_STATE_OPEN) {
> > + spin_lock_bh(&ptp->lock);
> > + rc = ptp->ops->adjfreq(edev->cdev, ppb);
>
> Why add this extra layer of indirection?
>
> You could put these this test into qed_ptp_hw_adjfreq() and register that
> function directly.
>
Which level of indirection? The usage of ptp->ops->() functions?
That's part of the driver structuring - qed is responsible for accessing HW
so it implements api functions for accessing PTP-related configuration,
while qede is responsible for the network interface and thus is the one to
register the clock and implements its API.
The operations ptp->ops->() originate from qed, so we can't refactor qede
state-logic there and use it directly.