On 18/11/15 12:05, Bill Fischofer wrote:


On Wed, Nov 18, 2015 at 4:58 AM, Zoltan Kiss <[email protected]
<mailto:[email protected]>> wrote:


    On 17/11/15 20:46, Bill Fischofer wrote:

        I vote for B.  The idea is that if the application wishes to
        override it
        can do so otherwise let the implementation take its defaults
        from the
        environment or however else it wishes to support platform-specific


    I think your analogy fails a bit here because not passing
    odp_platform_init_t doesn't mean you are using "defaults". It just
    means you are using an another way to provide the configuration.


That "other way" by definition is a platform-specific default mechanism,
which might be an environment variable or something else entirely.  The
point is either the application has an application-centric preference or
it does not.  Option B handles those options simply and cleanly.

I see. If you phrase it like this, it explains why we want to have two ways to do the same things, I like that. My original thought was to explicitly define ODP_PLATFORM_PARAMS, but it's better to leave it out.
I would phrase option B then like this:

--- a/include/odp/api/init.h
+++ b/include/odp/api/init.h
@@ -152,6 +152,10 @@ typedef struct odp_platform_init_t {
  *
  * @see odp_term_global()
  * @see odp_init_local() which is required per thread before use.
+ * @note The underlying implementation may have an another way to get
+ * configuration related to platform_params (e.g. environmental variable,
+ * configuration file), but if the application passes it, it should always
+ * take precedence.
  */
 int odp_init_global(const odp_init_t *params,
                    const odp_platform_init_t *platform_params);





        configuration options.  This is in keeping with how we handle other
        overridable defaults for things like log and abort functions.
        Specify
        NULL == accept whatever default behavior is in effect, otherwise
        specify
        what you want.  Simpler for everyone.

        On Tue, Nov 17, 2015 at 1:05 PM, Mike Holmes
        <[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>
        wrote:



             On 17 November 2015 at 13:54, Zoltan Kiss
        <[email protected] <mailto:[email protected]>
             <mailto:[email protected]
        <mailto:[email protected]>>> wrote:

                 Hi all,

                 Our odp_init_global() has a second parameter with type
                 odp_platform_init_t. It's supposed to convey platform
        specific
                 init parameters, however neither linux-generic nor
        linux-dpdk
                 uses that. In the latter we use instead the
        ODP_PLATFORM_PARAMS
                 environment variable. It has the little advantage that
        you don't
                 have to modify your application's code, but it limits
        you to
                 strings. In case of ODP-OVS we store this in OVSDB and
        retrieve
                 it from the startup script (or specify it manually if
        you don't
                 use the startup script.)
                 I'm tempted to change ODP-OVS and ODP-DPDK to use
                 odp_platform_init_t, would be cleaner for OVS and for
        any bigger
                 application which have a nice, full-fledged config database
                 solution. But that would immediately bring us a bigger
        problem:
                 none of our unit tests or example applications supports
        passing
                 this parameter at all. They are small applications,
        implementing
                 a proper config management would be an overkill. I have two
                 options to solve this:

                 Apart from keeping the odp_platform_init_t type to be
        passed
                 odp_init_global()

                 A) change our code in linux-generic for examples and
        tests (>20
                 places in the repo) to get the platform parameters from
                 ODP_PLATFORM_PARAMS env variable, and pass it down to
                 odp_init_global() as a string.

                 B) Or just allow a platform to use both ways, document
        this, and
                 require that if both are present, the
        odp_platform_init_t passed
                 as parameter should take precedence. So smaller
        applications
                 using simply configurable platforms (like ODP-DPDK)
        don't have
                 to figure out a way to deal with this problem.

                 I have a slight preference towards B), but I could be
        convinced
                 that it's a bad idea to have 2 ways to do the same thing.


             I like A, two ways always feels bad to me.
             I like that it is explicitly passed in and you know what
        you have.
             Env vars can change without the difference being seen in
        the code as
             easily and not all OS'es have env vars. Env vars are a
        great way to
             do system dependent things but I think the application should
             translate them into the odp_platform_init_t so that the
        fudging is
             the apps problem and the app knows more about the portability
             compromises it is making when using platform specifics.


                 Thoughts?

                 Zoltan
                 _______________________________________________
                 lng-odp mailing list
        [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        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

             __



             _______________________________________________
             lng-odp mailing list
        [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        https://lists.linaro.org/mailman/listinfo/lng-odp



_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to