summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorEmilio G. Cota <cota@braap.org>2016-10-05 18:34:40 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2016-10-06 18:04:13 +0200
commit9c7d64eb2a47033c9697fb4a5a540af1aa3915ab (patch)
tree955534fa86e4a1b1308015efc000920edada9c34
parent76b553b308dc8671eb672b889b38889b1231cf1e (diff)
downloadfocaccia-qemu-9c7d64eb2a47033c9697fb4a5a540af1aa3915ab.tar.gz
focaccia-qemu-9c7d64eb2a47033c9697fb4a5a540af1aa3915ab.zip
test-qht: perform lookups under rcu_read_lock
qht_lookup is meant to be called from an RCU read-critical
section. Make sure we're in such a section in test-qht
when performing lookups, despite the fact that no races
in qht can be triggered by test-qht since it is single-threaded.

Note that rcu_register_thread is already called by the
rcu_after_fork hook, and therefore duplicating it here would
be a bug.

Signed-off-by: Emilio G. Cota <cota@braap.org>
Message-Id: <1475706880-10667-4-git-send-email-cota@braap.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--tests/test-qht.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/tests/test-qht.c b/tests/test-qht.c
index 46a64b6731..9b7423abb6 100644
--- a/tests/test-qht.c
+++ b/tests/test-qht.c
@@ -6,6 +6,7 @@
  */
 #include "qemu/osdep.h"
 #include "qemu/qht.h"
+#include "qemu/rcu.h"
 
 #define N 5000
 
@@ -51,6 +52,7 @@ static void check(int a, int b, bool expected)
     struct qht_stats stats;
     int i;
 
+    rcu_read_lock();
     for (i = a; i < b; i++) {
         void *p;
         uint32_t hash;
@@ -61,6 +63,8 @@ static void check(int a, int b, bool expected)
         p = qht_lookup(&ht, is_equal, &val, hash);
         g_assert_true(!!p == expected);
     }
+    rcu_read_unlock();
+
     qht_statistics_init(&ht, &stats);
     if (stats.used_head_buckets) {
         g_assert_cmpfloat(qdist_avg(&stats.chain), >=, 1.0);