vppinfra: Put clib_perf* behind Linux checks and provide stubs for FreeBSD

As a placeholder stub out clib_perf functions on FreeBSD, the interface
for performance counters on FreeBSD is different and will require its
own implementation.

Type: improvement
Change-Id: I61511ebe5ee1fd6fe93d3179c7843c811f47a846
Signed-off-by: Tom Jones <thj@freebsd.org>
diff --git a/src/vppinfra/perfmon/perfmon.h b/src/vppinfra/perfmon/perfmon.h
index d940921..5b904a6 100644
--- a/src/vppinfra/perfmon/perfmon.h
+++ b/src/vppinfra/perfmon/perfmon.h
@@ -68,6 +68,7 @@
 static_always_inline void
 clib_perfmon_ioctl (int fd, u32 req)
 {
+#ifdef __linux__
 #ifdef __x86_64__
   asm volatile("syscall"
 	       :
@@ -76,6 +77,7 @@
 #else
   ioctl (fd, req, PERF_IOC_FLAG_GROUP);
 #endif
+#endif /* linux */
 }
 
 clib_error_t *clib_perfmon_init_by_bundle_name (clib_perfmon_ctx_t *ctx,
@@ -87,6 +89,7 @@
 void clib_perfmon_capture_group (clib_perfmon_ctx_t *ctx, char *fmt, ...);
 format_function_t format_perfmon_bundle;
 
+#ifdef __linux__
 static_always_inline void
 clib_perfmon_reset (clib_perfmon_ctx_t *ctx)
 {
@@ -102,6 +105,23 @@
 {
   clib_perfmon_ioctl (ctx->group_fd, PERF_EVENT_IOC_DISABLE);
 }
+#elif __FreeBSD__
+static_always_inline void
+clib_perfmon_reset (clib_perfmon_ctx_t *ctx)
+{
+  /* TODO: Implement for FreeBSD */
+}
+static_always_inline void
+clib_perfmon_enable (clib_perfmon_ctx_t *ctx)
+{
+  /* TODO: Implement for FreeBSD */
+}
+static_always_inline void
+clib_perfmon_disable (clib_perfmon_ctx_t *ctx)
+{
+  /* TODO: Implement for FreeBSD */
+}
+#endif /* linux */
 
 #define CLIB_PERFMON_BUNDLE(x)                                                \
   static clib_perfmon_bundle_reg_t clib_perfmon_bundle_reg_##x;               \
diff --git a/src/vppinfra/test/test.h b/src/vppinfra/test/test.h
index a0e5f6d..8d75636 100644
--- a/src/vppinfra/test/test.h
+++ b/src/vppinfra/test/test.h
@@ -84,6 +84,7 @@
     __VA_ARGS__, {}                                                           \
   }
 
+#ifdef __linux__
 static_always_inline void
 test_perf_event_reset (test_perf_t *t)
 {
@@ -99,6 +100,23 @@
 {
   clib_perfmon_ioctl (t->fd, PERF_EVENT_IOC_DISABLE);
 }
+#elif __FreeBSD__
+static_always_inline void
+test_perf_event_reset (test_perf_t *t)
+{
+  /* TODO: Implement for FreeBSD */
+}
+static_always_inline void
+test_perf_event_enable (test_perf_t *t)
+{
+  /* TODO: Implement for FreeBSD */
+}
+static_always_inline void
+test_perf_event_disable (test_perf_t *t)
+{
+  /* TODO: Implement for FreeBSD */
+}
+#endif
 
 void *test_mem_alloc (uword size);
 void *test_mem_alloc_and_fill_inc_u8 (uword size, u8 start, u8 mask);