I am confused here: The rules (e.g. order in which different ODP function
should be called) and the behaviour (e.g. what is returned by
ODP_pktio_lookup()) cannot be implementation dependant. At least not if we
wish application to be portable between different ODP implementation...
If pktio_open() should be called before any ODP task is created, shouldn't
it be written and apply to all ODP implementations?
I guess we can take that at some ARCH call...


On 30 December 2015 at 10:32, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolai...@nokia.com> wrote:

> This is an implementation issue. An implementation may support only
> pthreads and processes if all resources are setup before the fork. It’s
> trickier to support separate processes (not forked from a common ODP app
> process) or processes forked before all resources are setup, but it can be
> done. The current linux-generic implementation has a broken support for
> processes (it used to have minimal support and worked with odp_scheduling
> test). A process support test case (in minimum for processes forked after
> resource creation) should be added. Carl may have even created a bug for
> that.
>
>
>
> Process mode could be requested with a global init param. For example, in
> process mode a pktio handle could point to a table of socket fd’s – one for
> each process, etc. Anyway, first step would be to ensure correct shared mem
> usage in process mode: allocate everything as shm and make sure that mmap’s
> result identical virtual -> physical memory mapping.
>
>
>
> Application uses the API (all handles, etc resources) exactly the same way
> regardless of the mode: bare metal, pthread, linux process, RTOS process, …
> If there are gaps in the API (e.g. in the global init phase), we’ll fix
> those.
>
>
>
> - Petri
>
>
>
>
>
> *From:* lng-odp [mailto:lng-odp-boun...@lists.linaro.org] *On Behalf Of *EXT
> Christophe Milard
> *Sent:* Wednesday, December 30, 2015 10:10 AM
> *To:* Maxim Uvarov
> *Cc:* LNG ODP Mailman List
> *Subject:* Re: [lng-odp] pktio with file descriptor used for io and linux
> processes as ODP tasks...
>
>
>
> 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