Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Aug 2021 18:26:37 -0700
From:      Craig Leres <leres@freebsd.org>
To:        freebsd-hackers@freebsd.org
Subject:   Patched gpsd and /dev/pps0 results in "sleeping thread" kernel panic
Message-ID:  <dc4c4948-738e-c530-d96f-ade5cce5d3d2@freebsd.org>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------65AF694C5EFA2B5FEF707328
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

I have many FreeBSD based ntp time servers using half a dozen different 
kinds of receivers. Now I have a Javad Alpha2 satellite receiver I'd 
like to use. Since gpsd knows how to talk GREIS to it I'm pretty deep 
into trying to figure out how to configure that.

gpsd appears to know a lot about the RFC 2783 pps api but incorrectly 
assumes only tty-like devices can support it. It tries to use time_pps_* 
functions with /dev/gps0 (a symlink to cuau0) which fail and doesn't 
even open /dev/pps0. My gpsd rc.conf config is:

     gpsd_enable="YES"
     gpsd_flags="-D1 -n -s 115200"
     gpsd_devices="/dev/gps0 /dev/pps0"

The relevant part of my ntp.conf is (driver 46 is the GPSD-NG driver):

     server 127.127.46.0
     fudge 127.127.46.0 flag4 1

Running with these two configs, the gpsd tool cgps shows the radio 
happily is tracking ~20 satellites. ntpd shows "GPSD" running about 10 
us fast but because this so far off it eventually discards it (ntpq -p 
show 'x' before it). I know /dev/pps0 works because if I add pps clock 
config (driver 22) for it to ntp.conf:

     server 127.127.22.0 prefer
     fudge 127.127.22.0 flag3 1

ntpd is then able to poll for data and shows a reasonable offset that is 
comparable to ntpd running on nearby servers.

So I'm pretty close, I just need to get gpsd working with /dev/pps0. To 
that end, I made a copy of the source and made some changes to 
ppsthread.c (see attached patch.txt) which basically forces an open() on 
/dev/pps0. This gets further:

     gpsd:INFO: KPPS:/dev/pps0 pps_caps 0x1151
     gpsd:INFO: KPPS:/dev/pps0 have PPS_CANWAIT
     gpsd:WARN: KPPS:/dev/pps0 missing PPS_CAPTURECLEAR, pulse may be offset
     gpsd:INFO: KPPS:/dev/pps0 kernel PPS will be used
     [New LWP 101408 of process 2046]
     gpsd:PROG: PPS:/dev/pps0 thread launched
     gpsd:INFO: PPS:/dev/pps0 ntpshm_link_activate: 0
     gpsd:INFO: device /dev/pps0 activated

and gpsd starts to talk GREIS protocol to the radio and then the kernel 
panics with "sleeping thread".

Here are more details about my setup. I have 12.2-RELEASE-p10 kernel 
with these options:

     device          pps
     options         PPS_SYNC
     options         P1003_1B_MQUEUE

I'm building the ports version of net/ntp with these options:

     ATOM DEBUG IPV6 JUPITER NMEA ONCORE PERL_UTILS SHM SSL THREADS

I'm building the ports version of astro/gpsd with these options:

     GPSCLOCK IPV6 NCURSES NMEA0183 NTP NTPSHM ONCORE PPS RECONFIG 
SHMEXPORT SOCKEXPORT

My gpsd source tree is just a copy of patched version of the astro/gpsd 
port. (Which caused me to have to learn how to use scons...) When 
testing I start gpsd with:

     ./gpsd -N -D5 -n -s 115200 -P /var/run/gpsd.pid /dev/gps0 /dev/pps0

The Alpha2 is connected to /dev/cuau0 at 115200 baud, its pps is 
connected to a parallel printer port.

Can anyone help me with gpsd+pps and/or the kernel panic?

		Craig

--------------65AF694C5EFA2B5FEF707328
Content-Type: text/plain; charset=UTF-8;
 name="patch.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="patch.txt"

LS0tIHBwc3RocmVhZC5jCTIwMjEvMDkvMDEgMDA6MTg6MTMJMS4xCisrKyBwcHN0aHJlYWQu
YwkyMDIxLzA5LzAxIDAwOjI4OjI3CkBAIC0yMTYsNiArMjE2LDEzIEBACiB9CiAjZW5kaWYg
LyogX19saW51eF9fICovCiAKKyNpZmRlZiBfX0ZyZWVCU0RfXworY2hhciAqcHBzX2dldF9m
aXJzdCh2b2lkKQoreworICAgIHJldHVybiAiL2Rldi9wcHMwIjsKK30KKyNlbmRpZgorCiBz
dGF0aWMgaW50IGluaXRfa2VybmVsX3BwcyhzdHJ1Y3QgaW5uZXJfY29udGV4dF90ICppbm5l
cl9jb250ZXh0KQogLyogcmV0dXJuIGhhbmRsZSBmb3Iga2VybmVsIHBwcywgb3IgLTE7IHJl
cXVpcmVzIHJvb3QgcHJpdmlsZWdlcyAqLwogewpAQCAtMjMyLDYgKzIzOSwxNSBAQAogICAg
IGlubmVyX2NvbnRleHQtPmtlcm5lbHBwc19oYW5kbGUgPSAtMTsKICAgICBpbm5lcl9jb250
ZXh0LT5wcHNfY2Fud2FpdCA9IGZhbHNlOwogCisjaWZkZWYgX19GcmVlQlNEX18KKyAgICBp
ZiAoc3RybmNtcChwcHNfdGhyZWFkLT5kZXZpY2VuYW1lLCAiL2Rldi9wcHMiLCA4KSAhPSAw
KSB7CisJcHBzX3RocmVhZC0+bG9nX2hvb2socHBzX3RocmVhZCwgVEhSRUFEX1dBUk4sCisJ
ICAgICJLUFBTOiVzIGlnbm9yaW5nIG5vbi1wcHMgZGV2aWNlIGluIGluaXRfa2VybmVsX3Bw
c1xuIiwKKwkgICAgcHBzX3RocmVhZC0+ZGV2aWNlbmFtZSk7CisJcmV0dXJuICgtMSk7Cisg
ICAgfQorI2VuZGlmCisKICAgICAvKgogICAgICAqIFRoaXMgbmV4dCBjb2RlIGJsb2NrIGFi
dXNlcyAicmV0IiBieSBzdG9yaW5nIHRoZSBmaWxlZGVzY3JpcHRvcgogICAgICAqIHRvIHVz
ZSBmb3IgUkZDMjc4MyBjYWxscy4KQEAgLTM0MSw4ICszNTcsMjIgQEAKICAgICAgKiBGSVhN
RSEgbmVlZCBtb3JlIHNwZWNpZmljIHRoYW4gJ25vdCBsaW51eCcKICAgICAgKi8KICAgICAo
dm9pZClzdHJsY3B5KHBhdGgsIHBwc190aHJlYWQtPmRldmljZW5hbWUsIHNpemVvZihwYXRo
KSk7Ci0gICAgLy8gY3BwY2hlY2stc3VwcHJlc3MgcmVkdW5kYW50QXNzaWdubWVudAotICAg
IHJldCAgPSBwcHNfdGhyZWFkLT5kZXZpY2VmZDsKKworICAgIGlmIChwcHNfdGhyZWFkLT5k
ZXZpY2VmZCA8IDApIHsKKwkgICAgcmV0ID0gb3BlbihwYXRoLCBPX1JEV1IpOworCSAgICBp
ZiAocmV0IDwgMCkgeworCQljaGFyIGVycmJ1ZltCVUZTSVpdID0gInVua25vd24gZXJyb3Ii
OworCQlwcHNfc3RyZXJyb3JfcihlcnJubywgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJ
CXBwc190aHJlYWQtPmxvZ19ob29rKHBwc190aHJlYWQsIFRIUkVBRF9JTkYsCisJCQkgICAg
IktQUFM6JXMgcnVubmluZyBhcyAlZC8lZCwgY2Fubm90IG9wZW4gJXM6ICVzXG4iLAorCQkJ
ICAgIHBwc190aHJlYWQtPmRldmljZW5hbWUsCisJCQkgICAgZ2V0dWlkKCksIGdldGV1aWQo
KSwKKwkJCSAgICBwYXRoLCBlcnJidWYpOworCQlyZXR1cm4gKC0xKTsKKwkgICAgfQorICAg
IH0gZWxzZSB7CisJcmV0ICA9IHBwc190aHJlYWQtPmRldmljZWZkOworICAgIH0KICNlbmRp
ZgogICAgIC8qIGFzc2VydChyZXQgPj0gMCk7ICovCiAgICAgcHBzX3RocmVhZC0+bG9nX2hv
b2socHBzX3RocmVhZCwgVEhSRUFEX0lORiwK
--------------65AF694C5EFA2B5FEF707328--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?dc4c4948-738e-c530-d96f-ade5cce5d3d2>