On Tue, Oct 08, 2019 at 10:56:40AM +0000, Igor Russkikh wrote:
> diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
> b/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
> index d5a28904f708..ba1597bb6eab 100644
> --- a/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
> +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
> @@ -16,15 +16,107 @@
> struct aq_ptp_s {
> struct aq_nic_s *aq_nic;
>
> + spinlock_t ptp_lock;
> struct ptp_clock *ptp_clock;
> struct ptp_clock_info ptp_info;
> };
>
> +/* aq_ptp_adjfreq
> + * @ptp: the ptp clock structure
> + * @ppb: parts per billion adjustment from base
> + *
> + * adjust the frequency of the ptp cycle counter by the
> + * indicated ppb from the base frequency.
> + */
> +static int aq_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
The adjfreq() callback is deprecated. Please implement adjfine() instead.
> +{
> + struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
> + struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
> +
> + mutex_lock(&aq_nic->fwreq_mutex);
Here you use a different lock than...
> + aq_nic->aq_hw_ops->hw_adj_clock_freq(aq_nic->aq_hw, ppb);
> + mutex_unlock(&aq_nic->fwreq_mutex);
> +
> + return 0;
> +}
> +
> +/* aq_ptp_adjtime
> + * @ptp: the ptp clock structure
> + * @delta: offset to adjust the cycle counter by
> + *
> + * adjust the timer by resetting the timecounter structure.
> + */
> +static int aq_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
> +{
> + struct aq_ptp_s *aq_ptp = container_of(ptp, struct aq_ptp_s, ptp_info);
> + struct aq_nic_s *aq_nic = aq_ptp->aq_nic;
> + unsigned long flags;
> +
> + spin_lock_irqsave(&aq_ptp->ptp_lock, flags);
... here. Is it safe to concurrently set the time and the frequency?
> + aq_nic->aq_hw_ops->hw_adj_sys_clock(aq_nic->aq_hw, delta);
> + spin_unlock_irqrestore(&aq_ptp->ptp_lock, flags);
> +
> + return 0;
> +}
Thanks,
Richard