On 12/23/2014 10:40 PM, Mike Holmes wrote:


On 23 December 2014 at 13:49, Bill Fischofer <[email protected] <mailto:[email protected]>> wrote:

    That's good to know and certainly the code is cleaner that way.  I
    think we should adopt the practice that any architecture-specific
    changes to linux-generic code (adds, updates, or removals) must
    either originate from or have a Reviewed-by a representative of
    that architecture (in this case, Bala).  That way there's no
    confusion as to whether the known experts agree with the change,
    since these sort of things can have subtle implications that are
    not obvious to the layman.


I think linux-generic should be devoid of any per core optimizations in its default state. There could be in an arch directory and it would be supported as you say Bill by someone who will care for that that variant, this also avoids filling linux-generic with a possibly large list of preprocessor flags that we can't test.

In this case we don't have public access to the octeon to even know if this code works so separating or deletion feels right to me, although Cavium are adding their board in this case.

To have optimizations we should understand which per arch optimization we need. I see that if newer gcc supports good optimizations then we need to use that gcc. Most of people use Open Embedded and Linaro gcc which is almost latest version. So if there is no optimization in standard environment (gcc, kernel, libc) then arch implementation should go to platform specific git variant. If it's covered by standard environment then we simple updating minimal version requirement for required component.

Maxim.



    On Tue, Dec 23, 2014 at 12:38 PM, Ola Liljedahl
    <[email protected] <mailto:[email protected]>> wrote:

        I had some discussions with Bala and we think the GCC
        generates the
        appropriate code for OCTEON so there should be no need for any
        OCTEON-specific inline assembler in odp_atomic.h. I just
        didn't want
        to remove this piece of code when I redesigned the atomic support
        because I didn't understand why there is a SYNCW instruction
        *before*
        the load. Load-acquire type of loads may need sync or barrier
        instructions but they come after the load, not before.

        I think we should trust GCC to generate better code for OCTEON
        than us
        mere humans, at least until proven wrong. So please remove this
        OCTEON-specific snippet.

        -- Ola


        On 23 December 2014 at 18:01, Mike Holmes
        <[email protected] <mailto:[email protected]>> wrote:
        >
        >
        > On 23 December 2014 at 11:15, Taras Kondratiuk
        <[email protected] <mailto:[email protected]>>
        > wrote:
        >>
        >> On 12/23/2014 05:28 PM, Mike Holmes wrote:
        >> > how will this work, Octeon does not care about
         __atomic_fetch_add(&v,
        >> > 1, __ATOMIC_RELAXED); and yet you will fail configure I
        assume
        >> >
        >> > static inline uint32_t
        odp_atomic_fetch_inc_u32(odp_atomic_u32_t *atom)
        >> > {
        >> > #if defined __OCTEON__
        >> >>-------uint32_t ret;
        >> >>-------__asm__ __volatile__ ("syncws");
        >> >>-------__asm__ __volatile__ ("lai %0,(%2)" : "=r" (ret),
        "+m" (atom) :
        >> >>------->------->------- "r" (atom));
        >> >>-------return ret;
        >> > #else
        >> >>-------return __atomic_fetch_add(&atom->v, 1,
        __ATOMIC_RELAXED);
        >> > #endif
        >> > }
        >>
        >> Linux-generic shouldn't have arch specific parts, because it is
        >> *generic*. Instead it can fall back to strong __sync
        functions if
        >> __atomic are not available.
        >>
        >
        > Linux kernel is generic but has core specifics - is this not
        the same ?
        >
        > What about these cases ?
        >
        > platform/linux-generic/odp_system_info.c:static int
        cpuinfo_octeon(FILE
        > *file, odp_system_info_t *sysinfo)
        > platform/linux-generic/odp_system_info.c:    .cpu_arch_str =
        "octeon",
        > platform/linux-generic/odp_system_info.c:    .cpuinfo_parser =
        > cpuinfo_octeon
        > platform/linux-generic/include/api/odp_align.h:#if defined
        __x86_64__ ||
        > defined __i386__
        > platform/linux-generic/include/api/odp_sync.h:#if defined
        __x86_64__ ||
        > defined __i386__
        > platform/linux-generic/include/odp_spin_internal.h:#if
        defined __x86_64__ ||
        > defined __i386__
        > platform/linux-generic/odp_system_info.c:#if defined
        __x86_64__ || defined
        > __i386__ || defined __OCTEON__ || \
        > platform/linux-generic/odp_system_info.c:#if defined
        __x86_64__ || defined
        > __i386__
        > platform/linux-generic/odp_system_info.c:static int
        cpuinfo_x86(FILE *file,
        > odp_system_info_t *sysinfo)
        > platform/linux-generic/odp_system_info.c:    #if defined
        __x86_64__ ||
        > defined __i386__
        > platform/linux-generic/odp_system_info.c:    .cpu_arch_str =
        "x86",
        > platform/linux-generic/odp_system_info.c:    .cpuinfo_parser =
        > cpuinfo_x86
        > platform/linux-generic/odp_system_info.c:#if defined
        __x86_64__ || defined
        > __i386__ || defined __OCTEON__ || \
        > platform/linux-generic/odp_time.c:#if defined __x86_64__ ||
        defined __i386__
        > platform/linux-generic/include/api/odp_align.h:#elif defined
        __arm__ ||
        > defined __aarch64__
        > platform/linux-generic/include/api/odp_sync.h:#elif
        defined(__arm__)
        > platform/linux-generic/include/odp_spin_internal.h:#elif
        defined __arm__
        > platform/linux-generic/odp_system_info.c:#elif defined
        __arm__ || defined
        > __aarch64__
        > platform/linux-generic/odp_system_info.c:static int
        cpuinfo_arm(FILE *file
        > ODP_UNUSED,
        > platform/linux-generic/odp_system_info.c:    #elif defined
        __arm__ ||
        > defined __aarch64__
        > platform/linux-generic/odp_system_info.c:    .cpu_arch_str =
        "arm",
        > platform/linux-generic/odp_system_info.c:    .cpuinfo_parser =
        > cpuinfo_arm
        >
        >
        >>
        >>
        >> Taras Kondratiuk
        >
        >
        >
        >
        > --
        > Mike Holmes
        > Linaro  Sr Technical Manager
        > LNG - ODP

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




--
*Mike Holmes*
Linaro  Sr Technical Manager
LNG - ODP


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


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

Reply via email to