perf: Fix uninitialized core_set bug
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 19 Oct 2017 15:41:36 +0000 (11:41 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 26 Oct 2017 17:06:54 +0000 (13:06 -0400)
Depending on your machine, some bits in the core_set could be set already,
which would be treated as low-latency cores, and thus we wouldn't provision
them to the process.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/dev-util/perf/akaros.c
tools/dev-util/perf/akaros.h

index 08d8e2a..6d05bbd 100644 (file)
@@ -20,6 +20,7 @@ static const unsigned int llcores[] = {
 
 void ros_get_low_latency_core_set(struct core_set *cores)
 {
+       ros_get_no_cores_set(cores);
        for (size_t i = 0; i < COUNT_OF(llcores); i++)
                ros_set_bit(cores, llcores[i]);
 }
@@ -117,6 +118,13 @@ void ros_get_all_cores_set(struct core_set *cores)
        memset(cores->core_set, 0xff, DIV_ROUND_UP(max_cores, CHAR_BIT));
 }
 
+void ros_get_no_cores_set(struct core_set *cores)
+{
+       size_t max_cores = ros_total_cores();
+
+       memset(cores->core_set, 0, DIV_ROUND_UP(max_cores, CHAR_BIT));
+}
+
 void ros_not_core_set(struct core_set *dcs)
 {
        size_t max_cores = ros_total_cores();
index fe68464..d421a7a 100644 (file)
@@ -29,6 +29,7 @@ size_t ros_get_low_latency_core_count(void);
 size_t ros_total_cores(void);
 void ros_parse_cores(const char *str, struct core_set *cores);
 void ros_get_all_cores_set(struct core_set *cores);
+void ros_get_no_cores_set(struct core_set *cores);
 void ros_not_core_set(struct core_set *dcs);
 void ros_and_core_sets(struct core_set *dcs, const struct core_set *scs);
 void ros_or_core_sets(struct core_set *dcs, const struct core_set *scs);