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



--
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org │ Open source software for ARM SoCs