Workaround for the public domain NTP version ONLY: The workaround for public domain NTP version is to disable the KERNEL_PLL
from the NTP code. This way the ntp_Adjtime()
system call is totally bypassed without sacrificing any of the functionality of NTP. The only hit you might see is the way kernel precision timinig is done without the PLL algorithm in the kernel.
The easiest way to disable ntp_adjtime
option is(without changing any makefiles or other config files) to disable the KERNEL_PLL
value in the ./config.h
file.
After doing a ./configure
for probing for all the necessary tools(compilers, OS version, libraries), please comment out KERNEL_PLL
macro in the ./config.h
file. This will disable the KERNEL_PLL
part of the source code and the newly obtained xntpd
is just similar to the old one but it does not use ntp_adjtime()
system call. This prevents it from panicing the kernel.
/*#define KERNEL_PLL 1*/
I complied a new xntpd
binary this way and it does not have any ntp_adjtime()
related stuff.
Default:
/net/divya/export/home/mynam/public_domain/ntp/xntp3-5.92/xntpd>strings
xntpd |
grep ntp_adjtime
354:adj_frequency: ntp_adjtime failed: %m
357:loop_config: ntp_adjtime() failed: %m
435:get_kernel_info: ntp_adjtime() failed: %m
With KERNEL_PLL
disabled in config.h
file:
/net/divya/export/home/mynam/public_domain/ntp/xntp3-5.92/xntpd>strings
xntpd.nopll | grep ntp_adjtime