[ovs-dev] [PATCH] autoconf: check for linux/perf_event.h

Andy Zhou azhou at nicira.com
Thu Apr 16 20:02:06 UTC 2015


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 <alexw at nicira.com>
Signed-off-by: Andy Zhou <azhou at 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




More information about the dev mailing list