eal/ppc64: use glibc for cpu cycles count

__ppc_get_timebase() reads and returns the current value of the Time
Base Register. It's more efficient as it uses the processor’s time
base facility directly.

DPDK on FreeBSD currently is not supported on Powerpc64, it should
be safe to include the sys/platform/ppc.h.

Signed-off-by: Thinh Tran <thinhtr@linux.vnet.ibm.com>
Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
This commit is contained in:
Thinh Tran 2020-03-24 20:13:56 -04:00 committed by David Marchand
parent 4a5a867844
commit 56b27c4b36

View File

@ -10,6 +10,8 @@
extern "C" { extern "C" {
#endif #endif
#include <sys/platform/ppc.h>
#include "generic/rte_cycles.h" #include "generic/rte_cycles.h"
#include <rte_byteorder.h> #include <rte_byteorder.h>
@ -24,32 +26,7 @@ extern "C" {
static inline uint64_t static inline uint64_t
rte_rdtsc(void) rte_rdtsc(void)
{ {
union { return __ppc_get_timebase();
uint64_t tsc_64;
RTE_STD_C11
struct {
#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
uint32_t hi_32;
uint32_t lo_32;
#else
uint32_t lo_32;
uint32_t hi_32;
#endif
};
} tsc;
uint32_t tmp;
asm volatile(
"0:\n"
"mftbu %[hi32]\n"
"mftb %[lo32]\n"
"mftbu %[tmp]\n"
"cmpw %[tmp],%[hi32]\n"
"bne 0b\n"
: [hi32] "=r"(tsc.hi_32), [lo32] "=r"(tsc.lo_32),
[tmp] "=r"(tmp)
);
return tsc.tsc_64;
} }
static inline uint64_t static inline uint64_t