• Grygorii Strashko's avatar
    ptp: introduce ptp auxiliary worker · d9535cb7
    Grygorii Strashko authored
    Many PTP drivers required to perform some asynchronous or periodic work,
    like periodically handling PHC counter overflow or handle delayed timestamp
    for RX/TX network packets. In most of the cases, such work is implemented
    using workqueues. Unfortunately, Kernel workqueues might introduce
    significant delay in work scheduling under high system load and on -RT,
    which could cause misbehavior of PTP drivers due to internal counter
    overflow, for example, and there is no way to tune its execution policy and
    priority manuallly.
    
    Hence, The kthread_worker can be used insted of workqueues, as it create
    separte named kthread for each worker and its its execution policy and
    priority can be configured using chrt tool.
    
    This prblem was reported for two drivers TI CPSW CPTS and dp83640, so
    instead of modifying each of these driver it was proposed to add PTP
    auxiliary worker to the PHC subsystem.
    
    The patch adds PTP auxiliary worker in PHC subsystem using kthread_worker
    and kthread_delayed_work and introduces two new PHC subsystem APIs:
    
    - long (*do_aux_work)(struct ptp_clock_info *ptp) callback in
    ptp_clock_info structure, which driver should assign if it require to
    perform asynchronous or periodic work. Driver should return the delay of
    the PTP next auxiliary work scheduling time (>=0) or negative value in case
    further scheduling is not required.
    
    - int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay) which
    allows schedule PTP auxiliary work.
    
    The name of kthread_worker thread corresponds PTP PHC device name "ptp%d".
    Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d9535cb7
ptp_clock.c 9.93 KB