On 11 November 2015 at 00:45, Savolainen, Petri (Nokia - FI/Espoo) < petri.savolainen@nokia.com> wrote:
-----Original Message----- From: lng-odp [mailto:lng-odp-bounces@lists.linaro.org] On Behalf Of EXT Nicolas Morey-Chaisemartin Sent: Tuesday, November 10, 2015 5:13 PM To: Zoltan Kiss; linaro-toolchain@lists.linaro.org Cc: lng-odp Subject: Re: [lng-odp] Runtime inlining
As I said in the call last week, the problem is wider than that.
ODP specifies a lot of types but not their sizes, a lot of enums/defines (things like ODP_PKTIO_INVALID) but not their value either. For our port a lot of those values were changed for performance/implementation reason. So I'm not even compatible between one version of our ODP port and another one.
The only way I can see to solve this is for ODP to fix the size of all these types. Default/Invalid values are not that easy, as a pointer would have a completely different behaviour from structs/bitfields
Nicolas
Type sizes do not need to be fixed in general, but only when an application is build for binary compatibility (the use case we are talking here). Binary compatibility and thus the fixed type sizes are defined per ISA.
We can e.g. define a configure target (for our reference implementation == linux-generic) "--binary-compatible=armv8.x" or "--binary-compatible=x86_64". When you build your application with that option, "platform dependent" types and constants would be fixed to pre-defined values specified in (new) ODP API arch files.
So instead of building against odp/platform/linux-generic/include/odp/plat/queue_types.h ...
typedef ODP_HANDLE_T(odp_queue_t); #define ODP_QUEUE_INVALID _odp_cast_scalar(odp_queue_t, 0) #define ODP_QUEUE_NAME_LEN 32
... you'd build against odp/arch/armv8.x/include/odp/queue_types.h ...
With the introduction of odp/arch at the top level I think we should also move platform/linux-generic/arch to the same location
typedef uintptr_t odp_queue_t; #define ODP_QUEUE_INVALID ((uintptr_t)0) #define ODP_QUEUE_NAME_LEN 64
... or odp/arch/x86_64/include/odp/queue_types.h
typedef uint64_t odp_queue_t; #define ODP_QUEUE_INVALID ((uint64_t)0xffffffffffffffff) #define ODP_QUEUE_NAME_LEN 32
For highest performance on a fixed target platform, you'd still build against the platform directly
odp/platform/<soc_vendor_xyz>/include/odp/plat/queue_types.h
typedef xyz_queue_desc_t * odp_queue_t; #define ODP_QUEUE_INVALID ((xyz_queue_desc_t *)0xdeadbeef) #define ODP_QUEUE_NAME_LEN 20
-Petri
lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp