On 14 May 2015 at 06:31, Maxim Uvarov <maxim.uva...@linaro.org> wrote:
> On 05/14/2015 01:17, Mike Holmes wrote: > >> >> >> On 13 May 2015 at 05:03, Maxim Uvarov <maxim.uva...@linaro.org <mailto: >> maxim.uva...@linaro.org>> wrote: >> >> On 05/12/2015 20:52, Mike Holmes wrote: >> >> I dont think you can implement a mandatory ODP API based on an >> optional helper api. >> >> The ring implementation should be inside the linux-generic >> implementation if you want to use it, other implementations >> can copy it as they do now from linux-generic for other >> features such as timers. >> >> Helpers need to be supporting the tests, examples and >> applications and not the implementations. >> >> We have been walking a fuzzy line previously but I think the >> complexities and coupling get unwound when linux-generic does >> not rely on or compile in any helper code. >> >> Mike >> >> >> I think it depends if someone else uses odp ring from helper or >> not. Ring itself might be useful as middle buffer between >> processes. Also I just added shm flag which is in our api to have >> smaller changes. I think later we can decided where it's better to >> move odp ring. >> >> >> I dont agree that we can decide later. The test infrastructure that we >> decided to punt on to get 1.0 done is proving very difficult to fix now >> that it has established a pattern of use that is coupled to the platform is >> awkward ways, lets not do the same with helpers. >> >> Basing an implementation on optional code is not very robust, the >> makefile looks wrong with ../../ (below) >> > we have the same for linux.c and it works. That looks good for me. Don't > know why you don't like ../../ I object strongly to linux.c why is that built into the implementation when it is not an ODP API and is not in any way used by the implementation of linux-genric? It is optional support for tests, it makes no sense - this is exactly what I am trying to undo. > > , we have made helpers not optional in this way. We compile in the now >> not optional ring.c and we dont test it or use it in any way at all! that >> can't be correct. >> > > We compile it and test: > ./test/api_test/odp_ring_test.c > >> >> __LIB__libodp_la_SOURCES = \ >> >------->------->------- odp_barrier.c \ >> >------->------->------- odp_buffer.c \ >> >------->------->------- odp_classification.c \ >> >------->------->------- odp_cpumask.c \ >> >------->------->------- odp_crypto.c \ >> >------->------->------- odp_errno.c \ >> >------->------->------- odp_event.c \ >> >------->------->------- odp_init.c \ >> >------->------->------- odp_impl.c \ >> >------->------->------- ../../helper/linux.c \ >> >------->------->------- odp_packet.c \ >> >------->------->------- odp_packet_flags.c \ >> >------->------->------- odp_packet_io.c \ >> >------->------->------- odp_packet_socket.c \ >> >------->------->------- odp_pool.c \ >> >------->------->------- odp_queue.c \ >> >------->------->------- ../../helper/ring.c \ >> >> To share implementations, thus far KS2 and DPDK have their make file >> include the src from linux-generic as appropriate, so they will reuse ring >> & IPC from there and all re-use is then uniformly handled. >> > > Both KS2 and DPDK do not need odph_ring and linux-generic IPC for IPC > support. IPC there will be implemented in different way. But if needed they > can use odph_ring for something else Sure, I have no objection to reusing the code, but I dont agree to doing so by including it from the helper directory. > > > Let start by being clear what the helpers are before we start coupling >> them even more tightly with IPC. >> >> > ok. > > Previously stated and presumed still true is this description "Helpers >> are there to help tests, examples and applications, not implementations. >> Helpers are optional for applications" we need to establish this as fact >> before deciding much more. >> >> If helpers are not separate support code from the implementation then we >> need to state that all implementations should compile them all in so that >> customers of vendor implementations can run the validation tests. >> >> > I think that implementation should not be limitation here. If any > implementation wish to use helper it's free to do it. > I would say that "Helpers are functions which are optional for > applications. That function is very often used in ODP applications but they > are not separate ODP API. If they are not separate why are they not in the ODP API ? We say very clearly that there are no optional odp apis yet here we are coding exactly that so lets add them to the API or not. > These functions are not hided inside implementation so that apps > can use them directly. " > Maxim. > > Mike >> >> >> Maxim. >> >> >> On 8 May 2015 at 05:57, Maxim Uvarov <maxim.uva...@linaro.org >> <mailto:maxim.uva...@linaro.org> >> <mailto:maxim.uva...@linaro.org >> <mailto:maxim.uva...@linaro.org>>> wrote: >> >> Signed-off-by: Maxim Uvarov <maxim.uva...@linaro.org >> <mailto:maxim.uva...@linaro.org> >> <mailto:maxim.uva...@linaro.org >> >> <mailto:maxim.uva...@linaro.org>>> >> >> --- >> helper/include/odp/helper/ring.h | 2 ++ >> helper/ring.c | 9 ++++++++- >> 2 files changed, 10 insertions(+), 1 deletion(-) >> >> diff --git a/helper/include/odp/helper/ring.h >> b/helper/include/odp/helper/ring.h >> index 65c32ad..5e640a7 100644 >> --- a/helper/include/odp/helper/ring.h >> +++ b/helper/include/odp/helper/ring.h >> @@ -158,6 +158,8 @@ typedef struct odph_ring { >> >> #define ODPH_RING_F_SP_ENQ 0x0001 /* The default enqueue is >> "single-producer".*/ >> #define ODPH_RING_F_SC_DEQ 0x0002 /* The default dequeue is >> "single-consumer".*/ >> +#define ODPH_RING_SHM_PROC 0x0004 /* If set - ring is visible >> from different >> + processes. Default is >> thread >> visible. */ >> #define ODPH_RING_QUOT_EXCEED (1 << 31) /* Quota exceed for >> burst ops */ >> #define ODPH_RING_SZ_MASK (unsigned)(0x0fffffff) /* Ring size >> mask */ >> >> diff --git a/helper/ring.c b/helper/ring.c >> index a24a020..0927a6c 100644 >> --- a/helper/ring.c >> +++ b/helper/ring.c >> @@ -159,8 +159,14 @@ odph_ring_create(const char *name, >> unsigned >> count, unsigned flags) >> char ring_name[ODPH_RING_NAMESIZE]; >> odph_ring_t *r; >> size_t ring_size; >> + uint32_t shm_flag; >> odp_shm_t shm; >> >> + if (flags & ODPH_RING_SHM_PROC) >> + shm_flag = ODP_SHM_PROC; >> + else >> + shm_flag = 0; >> + >> /* count must be a power of 2 */ >> if (!ODP_VAL_IS_POWER_2(count) || (count > >> ODPH_RING_SZ_MASK)) { >> ODP_ERR("Requested size is invalid, must >> be power >> of 2, and do not exceed the size limit %u\n", >> @@ -173,7 +179,8 @@ odph_ring_create(const char *name, >> unsigned >> count, unsigned flags) >> >> odp_rwlock_write_lock(&qlock); >> /* reserve a memory zone for this ring.*/ >> - shm = odp_shm_reserve(ring_name, ring_size, >> ODP_CACHE_LINE_SIZE, 0); >> + shm = odp_shm_reserve(ring_name, ring_size, >> ODP_CACHE_LINE_SIZE, >> + shm_flag); >> >> r = odp_shm_addr(shm); >> >> -- >> 1.9.1 >> >> _______________________________________________ >> lng-odp mailing list >> lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org> >> <mailto:lng-odp@lists.linaro.org >> <mailto:lng-odp@lists.linaro.org>> >> https://lists.linaro.org/mailman/listinfo/lng-odp >> >> >> >> >> -- Mike Holmes >> Technical Manager - Linaro Networking Group >> Linaro.org <http://www.linaro.org/>***│ *Open source software >> for ARM SoCs >> >> >> >> >> >> -- >> Mike Holmes >> Technical Manager - Linaro Networking Group >> Linaro.org <http://www.linaro.org/>***│ *Open source software for ARM >> SoCs >> >> > -- Mike Holmes Technical Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp