Subject: Re: [PATCH] Added additional callback to ptp_clock_info:

From: Richard Cochran <[email-masked]>
Date: Fri, 26 Jun 2015 08:40:27 +0200

On Thu, Jun 25, 2015 at 04:42:57PM -0700, Christopher Hall wrote:
> @@ -196,19 +196,31 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)
>  			break;
>  		}
>  		pct = &sysoff->ts[0];
> -		for (i = 0; i < sysoff->n_samples; i++) {
> -			getnstimeofday64(&ts);
> +		if (ptp->info->getsynctime64 && sysoff->n_samples == 1) {
> +			ptp->info->getsynctime64(ptp->info, &ts, &systs);
> +			pct->sec = systs.tv_sec;
> +			pct->nsec = systs.tv_nsec;
> +			++pct;

Please use pct++ for the sake of consistency.

>  			pct->sec = ts.tv_sec;
>  			pct->nsec = ts.tv_nsec;
> -			pct++;
> -			ptp->info->gettime64(ptp->info, &ts);
> +			++pct;
> +			pct->sec = systs.tv_sec;
> +			pct->nsec = systs.tv_nsec;
> +		} else {
> +			for (i = 0; i < sysoff->n_samples; i++) {
> +				getnstimeofday64(&ts);
> +				pct->sec = ts.tv_sec;
> +				pct->nsec = ts.tv_nsec;
> +				pct++;
> +				ptp->info->gettime64(ptp->info, &ts);
> +				pct->sec = ts.tv_sec;
> +				pct->nsec = ts.tv_nsec;
> +				pct++;
> +			}
> +			getnstimeofday64(&ts);
>  			pct->sec = ts.tv_sec;
>  			pct->nsec = ts.tv_nsec;
> -			pct++;
>  		}
> -		getnstimeofday64(&ts);
> -		pct->sec = ts.tv_sec;
> -		pct->nsec = ts.tv_nsec;
>  		if (copy_to_user((void __user *)arg, sysoff, sizeof(*sysoff)))
>  			err = -EFAULT;
>  		break;
> diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h
> index b8b7306..edff9a5 100644
> --- a/include/linux/ptp_clock_kernel.h
> +++ b/include/linux/ptp_clock_kernel.h
> @@ -105,6 +105,9 @@ struct ptp_clock_info {
>  	int (*adjfreq)(struct ptp_clock_info *ptp, s32 delta);
>  	int (*adjtime)(struct ptp_clock_info *ptp, s64 delta);
>  	int (*gettime64)(struct ptp_clock_info *ptp, struct timespec64 *ts);
> +	int (*getsynctime64)
> +		(struct ptp_clock_info *ptp, struct timespec64 *dev,
> +		 struct timespec64 *sys);

The struct's KernelDoc also needs updating.

>  	int (*settime64)(struct ptp_clock_info *p, const struct timespec64 *ts);
>  	int (*enable)(struct ptp_clock_info *ptp,
>  		      struct ptp_clock_request *request, int on);
> -- 
> 1.9.1

Thanks,
Richard