I'll try to be clearer:
If a second linux process (ODP task) called B  does a pktio_lookup() on a
pktio opened by first linux process A (onother ODP task implemented as unix
process), it will be returned the pktio_handle that A created, and will
start using the file descriptor stored there.
B will use the file descriptor created by A.
I must be missing something. But that is doomed to fail in my eyes.

On 30 December 2015 at 08:57, Maxim Uvarov <maxim.uva...@linaro.org> wrote:

> On 12/30/2015 10:42, Christophe Milard wrote:
>
>>
>> My question relates to pktio when ODP tasks are implemented as unix
>> processes (as opposed to threads).
>>
>> I can see that the pktio_entry struct used is allocated as shared mem.
>>
>> If I take the socket pktio as an example, the socket file descriptor is
>> stored  in th pktio struct.
>> In other words, the socket file descriptor is shared between all ODP task
>> (i.e. unix processes).
>> This does makes sense only if:
>> 1)The process creating and using the pktio is unique (shared mem is not
>> necessary but won't hurt)
>> 2) the file descriptor is created before fork(), i.e. pktio_open() is
>> performed before ODP threads are created. Always.
>>
>> Are there any rules like this about the pktio handle usage?
>>
>> If a pktio handle is supposed to be reachable at any time by any task (at
>> worse case, a process A creates a pktio handle and passes it to another
>> processes B and C which performs io on the handle opened by A), then It
>> looks like we have a problem...
>>
>> I have a similar situation where a PCI dev (including quite a few file
>> descriptors) is used, and I hoped I could see from the socket example how
>> this is to be handled... but I am not sure...
>>
>> what am I missing...?
>>
>> Thanks,
>>
>> Christophe.
>>
> Not sure that I understand what exact problem is...
>
> In general you should never transmit any odp handle to other process. And
> task should relay only on return of odp_pktio_open() call.
> Threads can look up pktio with odp_pktio_t odp_pktio_lookup(const char
> *dev) call.
>
> Of course if you do
> pktio = odp_pktio_open("eth0")
> fork();
>
> Than you will have 2 process with same pktio handle value if you print it.
> That happens that fork() just clones memory of parent process to child. But
> you can not do another  pktio2 = odp_pktio_open("eth1") and transmit it to
> second process and expect that it will work.
>
> The same thing with file and socket descriptors.
>
> Maxim.
>
>
>
>
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to