aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/perfmon/perfmon.c6
-rw-r--r--src/plugins/perfmon/perfmon_periodic.c17
2 files changed, 14 insertions, 9 deletions
diff --git a/src/plugins/perfmon/perfmon.c b/src/plugins/perfmon/perfmon.c
index 552c88757f7..7e276c30810 100644
--- a/src/plugins/perfmon/perfmon.c
+++ b/src/plugins/perfmon/perfmon.c
@@ -110,14 +110,8 @@ perfmon_init (vlib_main_t * vm)
/* Default data collection interval */
pm->timeout_interval = 2.0; /* seconds */
vec_validate (pm->pm_fds, 1);
- vec_validate (pm->pm_fds[0], vec_len (vlib_mains) - 1);
- vec_validate (pm->pm_fds[1], vec_len (vlib_mains) - 1);
vec_validate (pm->perf_event_pages, 1);
- vec_validate (pm->perf_event_pages[0], vec_len (vlib_mains) - 1);
- vec_validate (pm->perf_event_pages[1], vec_len (vlib_mains) - 1);
vec_validate (pm->rdpmc_indices, 1);
- vec_validate (pm->rdpmc_indices[0], vec_len (vlib_mains) - 1);
- vec_validate (pm->rdpmc_indices[1], vec_len (vlib_mains) - 1);
pm->page_size = getpagesize ();
pm->perfmon_table = 0;
diff --git a/src/plugins/perfmon/perfmon_periodic.c b/src/plugins/perfmon/perfmon_periodic.c
index ac68c42c219..8498419f36f 100644
--- a/src/plugins/perfmon/perfmon_periodic.c
+++ b/src/plugins/perfmon/perfmon_periodic.c
@@ -130,6 +130,10 @@ enable_current_events (perfmon_main_t * pm)
for (i = 0; i < limit; i++)
{
+ vec_validate (pm->pm_fds[i], vec_len (vlib_mains) - 1);
+ vec_validate (pm->perf_event_pages[i], vec_len (vlib_mains) - 1);
+ vec_validate (pm->rdpmc_indices[i], vec_len (vlib_mains) - 1);
+
c = vec_elt_at_index (pm->single_events_to_collect,
pm->current_event + i);
@@ -169,6 +173,7 @@ enable_current_events (perfmon_main_t * pm)
close (fd);
return;
}
+ CLIB_MEM_UNPOISON (p, pm->page_size);
}
else
p = 0;
@@ -239,12 +244,18 @@ disable_events (perfmon_main_t * pm)
clib_unix_warning ("disable ioctl");
if (pm->perf_event_pages[i][my_thread_index])
- if (munmap (pm->perf_event_pages[i][my_thread_index],
- pm->page_size) < 0)
- clib_unix_warning ("munmap");
+ {
+ if (munmap (pm->perf_event_pages[i][my_thread_index],
+ pm->page_size) < 0)
+ clib_unix_warning ("munmap");
+ CLIB_MEM_POISON (pm->perf_event_pages[i][my_thread_index],
+ pm->page_size);
+ pm->perf_event_pages[i][my_thread_index] = 0;
+ }
(void) close (pm->pm_fds[i][my_thread_index]);
pm->pm_fds[i][my_thread_index] = 0;
+
}
}