Only process the PPS event types currently enabled in pps_params.mode.

This makes the PPS API behave correctly, but isn't ideal -- we still end
up capturing PPS data for non-enabled edges, we just don't process the
data into an event that becomes visible outside of kern_tc.  That's because
the event type isn't passed to pps_capture(), so it can't do the filtering.
Any solution for capture filtering is going to require touching every driver.
This commit is contained in:
Ian Lepore 2015-08-07 23:31:31 +00:00
parent 6f7a9f7c8d
commit 721b581722

View File

@ -1703,6 +1703,9 @@ pps_event(struct pps_state *pps, int event)
#endif
KASSERT(pps != NULL, ("NULL pps pointer in pps_event"));
/* Nothing to do if not currently set to capture this event type. */
if ((event & pps->ppsparam.mode) == 0)
return;
/* If the timecounter was wound up underneath us, bail out. */
if (pps->capgen == 0 || pps->capgen !=
atomic_load_acq_int(&pps->capth->th_generation))