diff --git a/lib/librte_eal/arm/include/rte_io_64.h b/lib/librte_eal/arm/include/rte_io_64.h index d07d9cb226..f9a1f10ce7 100644 --- a/lib/librte_eal/arm/include/rte_io_64.h +++ b/lib/librte_eal/arm/include/rte_io_64.h @@ -164,12 +164,14 @@ rte_write64(uint64_t value, volatile void *addr) rte_write64_relaxed(value, addr); } +__rte_experimental static __rte_always_inline void rte_write32_wc(uint32_t value, volatile void *addr) { rte_write32(value, addr); } +__rte_experimental static __rte_always_inline void rte_write32_wc_relaxed(uint32_t value, volatile void *addr) { diff --git a/lib/librte_eal/include/generic/rte_io.h b/lib/librte_eal/include/generic/rte_io.h index 0669baa0b6..ebcf8051e1 100644 --- a/lib/librte_eal/include/generic/rte_io.h +++ b/lib/librte_eal/include/generic/rte_io.h @@ -14,6 +14,7 @@ #include #include +#include #include #ifdef __DOXYGEN__ diff --git a/lib/librte_eal/x86/include/rte_io.h b/lib/librte_eal/x86/include/rte_io.h index c035eecc6a..730f958758 100644 --- a/lib/librte_eal/x86/include/rte_io.h +++ b/lib/librte_eal/x86/include/rte_io.h @@ -28,6 +28,7 @@ __rte_x86_movdiri(uint32_t value, volatile void *addr) : "a" (value), "d" (addr)); } +__rte_experimental static __rte_always_inline void rte_write32_wc_relaxed(uint32_t value, volatile void *addr) { @@ -47,11 +48,19 @@ rte_write32_wc_relaxed(uint32_t value, volatile void *addr) } } +__rte_experimental static __rte_always_inline void rte_write32_wc(uint32_t value, volatile void *addr) { + /* gcc complains about calling this experimental function even + * when not using it. Hide it with ALLOW_EXPERIMENTAL_API. + */ +#ifdef ALLOW_EXPERIMENTAL_API rte_wmb(); rte_write32_wc_relaxed(value, addr); +#else + rte_write32(value, addr); +#endif } #ifdef __cplusplus