From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51427) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brun3-0007bq-2P for qemu-devel@nongnu.org; Wed, 05 Oct 2016 18:35:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1brumx-00067p-4W for qemu-devel@nongnu.org; Wed, 05 Oct 2016 18:35:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:45178) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1brumu-00062d-RX for qemu-devel@nongnu.org; Wed, 05 Oct 2016 18:35:47 -0400 From: "Emilio G. Cota" Date: Wed, 5 Oct 2016 18:34:40 -0400 Message-Id: <1475706880-10667-4-git-send-email-cota@braap.org> In-Reply-To: <1475706880-10667-1-git-send-email-cota@braap.org> References: <1475706880-10667-1-git-send-email-cota@braap.org> Subject: [Qemu-devel] [PATCH 3/3] test-qht: perform lookups under rcu_read_lock List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: "Daniel P . Berrange" , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Richard Henderson , QEMU Developers 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 --- tests/test-qht.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test-qht.c b/tests/test-qht.c index 46a64b6..9b7423a 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); -- 2.7.4