On Mon, Mar 15, 2021 at 12:38:58PM +0100, Luigi 'Comio' Mantellini wrote: > Inside port_synchronize() I noticed this: > > case SERVO_LOCKED: > port_dispatch(p, EV_MASTER_CLOCK_SELECTED, 0); > break; > case SERVO_LOCKED_STABLE: > message_interval_request(p, last_state, sync_interval); > break; > > Supposing to have the port X as SLAVE with "SERVO_LOCKED_STABLE" state, > after a while I disable the ingoing traffic (SYNC/ANNUNCE) to the port X, > switching to another port Y still keeping the SERVO_LOCKED_STABLE > condition. The check_offset_threshold(), called by sample_sample(), should > always return "1' (true) because the s->curr_offset_values == 0 (and it is > fixed to servo_num_offset_values only in SERV_UNLOCKED and SERVO_JUMP > conditions). > > In these conditions the SERVO_LOCKED will not happen and the > port_dispatach(p, EV_MASTER_CLOCK_SELECTED, 0) should never be called, > resulting in a forever "UNCALIBRATED" condition.
Does changing port_synchronize() to this fix the issue for you? case SERVO_LOCKED_STABLE: message_interval_request(p, last_state, sync_interval); + port_dispatch(p, EV_MASTER_CLOCK_SELECTED, 0); break; Thanks, Richard _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel