>-----Original Message-----
>From: Miroslav Lichvar <mlich...@redhat.com> 
>Sent: Tuesday, May 3, 2022 11:35 AM
>To: Kubalewski, Arkadiusz <arkadiusz.kubalew...@intel.com>
>Cc: linuxptp-devel@lists.sourceforge.net; Kwapulinski, Piotr 
><piotr.kwapulin...@intel.com>; Sawula, Andrzej <andrzej.saw...@intel.com>; 
>Gerasymenko, Anatolii <anatolii.gerasyme...@intel.com>
>Subject: Re: [Linuxptp-devel] [PATCH 08/11] synce4l: add synce_port_ctrl 
>interface
>
>On Mon, May 02, 2022 at 11:06:02AM +0200, Arkadiusz Kubalewski wrote:
>> Used by synce_port to create, control and destroy RX/TX threads.
>> Ports in sync mode can use only TX thread (device in external input
>> mode) or both RX and TX threads (device in internal input mode).
>
>> +++ b/synce_port_ctrl.c
>> @@ -0,0 +1,1077 @@
>
>> +static int init_ql_str(struct allowed_qls_head *qls_stailq_head,
>> +                   const char *allowed_qls)
>> +{
>...
>> +    ptr = allowed_qls;
>> +    while (*ptr) {
>> +            unsigned long value;
>> +            struct ql *newql;
>> +
>> +            if (ptr > allowed_qls + allowed_qls_len) {
>> +                    break;
>> +            }
>
>This check needs to be performed before the "*ptr" in the while
>condition to avoid invalid memory access.

Makes perfect sense, will fix it.

>
>> +static int init_allowed_ext_qls(struct synce_port_rx *rx, struct config 
>> *cfg,
>> +                            const char *name)
>> +{
>> +    const char *allowed_qls;
>> +
>> +    STAILQ_INIT((struct allowed_qls_head *)&rx->allowed_ext_qls);
>
>The casting looks wrong/unnecessary, or at least it is causing
>compiler warnings about breaking strict aliasing.

Agree, will fix it.

>
>> +static int thread_start_wait(struct thread_common_data *cd)
>> +{
>> +    int cnt = (cd->heartbeat_usec / THREAD_STOP_SLEEP_USEC) + 1;
>> +
>> +    if (cd->state == THREAD_STARTED) {
>> +            pr_debug("THREAD_STARTED");
>> +
>> +            return 0;
>> +    }
>> +
>> +    while (cnt-- && cd->state != THREAD_STARTED) {
>> +            usleep(THREAD_STOP_SLEEP_USEC);
>> +    }
>
>This should be THREAD_START_SLEEP_USEC?

That's true, will fix it.

>
>And shouldn't be there some locking between the threads, e.g. with
>mutexes?

Sure, we can introduce locks on accessing child-threads data.

Benefits from introducing locks:
- TX thread - almost instant reaction on rebuild request
- RX thread - almost instant reaction on new QL received

Initially we were not sure if increasing complexity of threads is worth the
benefits. ESMC is a slow protocol and the Synchronous Ethernet standard
describes automatic adjustment of the clock recovered from one of the ports
while feeding its clock to the others, but SyncE-enabled network configuration
is rather static and change of QL would happen rarely (mostly due to errors, 
loosing proper reference signal on the SyncE-leader).

As we can see some benefits from having locks in place, I will add those
in the next patch version.

Thank you,
Arkadiusz

>
>-- 
>Miroslav Lichvar
>


_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to