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

Reply via email to