On 9/9/2011 06:39, Ken Hornstein wrote:
Ok, so undo the previous change and then duplicate the appropriate code under TIOCDCDTIMESTAMP?Yeah (of course, you still need the zs_makeintr() call, but you really need the rest of it). You know, I am puzzled by something ... I don't understand how you could ever get EBUSY when those devices are opened twice. The only returns of EBUSY I see in the zs driver code are if the device is being used by kgdb and if kauth fails on that (you can also get EBUSY from ttyopen() when using the dialout device, but I'm assuming you're not doing that). This is of course assuming everything is opening the devices with O_NONBLOCK. If you're getting EBUSY when two devices try to open that, I'd figure out why (that seems to be unrelated to any zs driver issues).
I'm not sure why either but the basic code of ntpd supposedly opens O_NONBLOCK in general so that it can open the port twice (once for the DCD detect and once for the TX/RX). It works on other systems, just not this one.
I'll test out these modifications later this weekend. As a test, I split my serial cable so DCD detection is running into one port and TX/RX is running to another. The end result of that is happy ntpd getting its PPS and a happy gpsd sucking in the SiRF data and running time stamps over to ntpd. Even the jitter and offset has settled down on the GPS timestamp because gpsd isn't going crazy with the single-port issue. Not exactly optimal having to run two ports where just one should work but as an experiment it works. I'm still going to try and fix the serial port problem because now it's bothering me. :)