Older Linux prior to version 2.6.32 do not support user mode performance events, They also don't have 'linux/perf_event.h' header file. Add check for those older Linux to conditionally compile perf-counter.c
Reported-by: Alex Wang <al...@nicira.com> Signed-off-by: Andy Zhou <az...@nicira.com> --- configure.ac | 1 + lib/perf-counter.c | 5 +++-- lib/perf-counter.h | 4 ++-- m4/openvswitch.m4 | 4 ++++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 8d47eb9..d1b48ca 100644 --- a/configure.ac +++ b/configure.ac @@ -111,6 +111,7 @@ OVS_CHECK_PKIDIR OVS_CHECK_RUNDIR OVS_CHECK_DBDIR OVS_CHECK_BACKTRACE +OVS_CHECK_PERF_EVENT OVS_CHECK_VALGRIND OVS_CHECK_SOCKET_LIBS OVS_CHECK_XENSERVER_VERSION diff --git a/lib/perf-counter.c b/lib/perf-counter.c index 4188f6b..a6c4965 100644 --- a/lib/perf-counter.c +++ b/lib/perf-counter.c @@ -15,7 +15,9 @@ */ /* This implementation only applies to the Linux platform. */ -#ifdef __linux__ + +#include <config.h> +#if defined(__linux__) && defined(HAVE_PERF_EVENT_H) #include <stddef.h> #include <sys/types.h> @@ -24,7 +26,6 @@ #include <sys/ioctl.h> #include <linux/perf_event.h> #include <asm/unistd.h> -#include <config.h> #include "dynamic-string.h" #include "openvswitch/vlog.h" #include "perf-counter.h" diff --git a/lib/perf-counter.h b/lib/perf-counter.h index 851bd63..9b36919 100644 --- a/lib/perf-counter.h +++ b/lib/perf-counter.h @@ -94,7 +94,7 @@ * will work just fine. */ -#ifdef __linux__ +#if defined(__linux__) && defined(HAVE_PERF_EVENT_H) struct perf_counter { const char *name; bool once; @@ -138,7 +138,7 @@ static inline void perf_counters_clear(void) {} static inline char * perf_counters_to_string(void) { - return xstrdup("Not Supported on this platform. Only available on Linux."); + return xstrdup("Not Supported on this platform. Only available on Linux (version >= 2.6.32)"); } #endif diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4 index ba3ed9b..8ace9ce 100644 --- a/m4/openvswitch.m4 +++ b/m4/openvswitch.m4 @@ -243,6 +243,10 @@ AC_DEFUN([OVS_CHECK_BACKTRACE], [AC_DEFINE([HAVE_BACKTRACE], [1], [Define to 1 if you have backtrace(3).])])]) +dnl Defines HAVE_PERF_EVENT if linux/perf_event.h is found. +AC_DEFUN([OVS_CHECK_PERF_EVENT], + [AC_CHECK_HEADERS([linux/perf_event.h])]) + dnl Checks for valgrind/valgrind.h. AC_DEFUN([OVS_CHECK_VALGRIND], [AC_CHECK_HEADERS([valgrind/valgrind.h])]) -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev