muvarov replied on github web page:

platform/linux-generic/pktio/netmap.c
line 14
@@ -388,13 +389,22 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, 
pktio_entry_t *pktio_entry,
 
        if (pkt_nm->is_virtual) {
                static unsigned mac;
+               uint32_t tid = syscall(SYS_gettid);
+
+               if ((int)tid == -1)


Comment:
@matiaselo @lumag  yep, I forgot that some syscalls might be not implemented on 
some systems, that  also will return error.

> Dmitry Eremin-Solenikov(lumag) wrote:
> @matiaselo yes, so this is fine.


>> Matias Elo(matiaselo) wrote:
>> syscall() specification still defines -1 as an error return value and we 
>> should adhere to the spec regardless of the function implementation which 
>> may change.


>>> muvarov wrote
>>> .


>>>> muvarov wrote
>>>> man gettid says that it always passes.
>>>> 
>>>> kernel code is also:
>>>> pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
>>>>                    struct pid_namespace *ns)
>>>> {
>>>>    pid_t nr = 0;
>>>> 
>>>>    rcu_read_lock();
>>>>    if (!ns)
>>>>            ns = task_active_pid_ns(current);
>>>>    if (likely(pid_alive(task))) {
>>>>            if (type != PIDTYPE_PID)
>>>>                    task = task->group_leader;
>>>>            nr = pid_nr_ns(rcu_dereference(task->pids[type].pid), ns);
>>>>    }
>>>>    rcu_read_unlock();
>>>> 
>>>>    return nr;
>>>> }
>>>> EXPORT_SYMBOL(__task_pid_nr_ns);
>>>> 
>>>> I.e. it will return init process tid 0 in worst case. So this check is not 
>>>> correct and not needed.
>>>> 
>>>> It might be needed additional cast:
>>>> uint32_t tid = (uint32_t)syscall(SYS_gettid) because of syscall returns 
>>>> pid_t.


>>>>> muvarov wrote
>>>>> @lumag  we also use SYS_gettid() in shm and timer. I think that is not 
>>>>> subject for this PR. Just general clean up.


>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>> See 
>>>>>> [here](https://stackoverflow.com/questions/21279649/getting-error-in-c-program-undefined-reference-to-gettid)
>>>>>>  for an interesting discussion of why gettid() is not used.


>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>> @matiaselo @muvarov Hmm. I thought that there is already a Glibc 
>>>>>>> wrapper. I would prefer this as a separate function, but it is of minor 
>>>>>>> priority then.


>>>>>>>> muvarov wrote
>>>>>>>> it was copied from netmap source  I think. gittid() will generate 
>>>>>>>> warning due to missing glibc wrapper: 
>>>>>>>> https://stackoverflow.com/questions/30680550/c-gettid-was-not-declared-in-this-scope
>>>>>>>>  Maybe something already changed...


>>>>>>>>> Matias Elo(matiaselo) wrote:
>>>>>>>>> What's the benefit from using gettid()? It seems like the only 
>>>>>>>>> difference is that gettid() cannot fail.


>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>> Why don't you use `gettid()` function? Then you can check for its 
>>>>>>>>>> existence in `configure.ac` and provide replacement implementation. 


https://github.com/Linaro/odp/pull/237#discussion_r147060031
updated_at 2017-10-26 07:09:00

Reply via email to