From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38302) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c72Gs-0005LT-OI for qemu-devel@nongnu.org; Wed, 16 Nov 2016 10:37:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c72Gp-0007Lk-Kn for qemu-devel@nongnu.org; Wed, 16 Nov 2016 10:37:10 -0500 Received: from mail-yw0-x242.google.com ([2607:f8b0:4002:c05::242]:34574) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c72Gp-0007LQ-FG for qemu-devel@nongnu.org; Wed, 16 Nov 2016 10:37:07 -0500 Received: by mail-yw0-x242.google.com with SMTP id a10so15016796ywa.1 for ; Wed, 16 Nov 2016 07:37:07 -0800 (PST) From: Pranith Kumar Date: Wed, 16 Nov 2016 10:37:05 -0500 Message-Id: <20161116153705.30206-1-bobby.prani@gmail.com> Subject: [Qemu-devel] [PATCH] translate-all: Enable locking debug in a debug build List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: alex.bennee@linaro.org Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net Unconditionally enable locking checks in debug builds so that we get wider testing. Using tcg_debug_assert() allows us to remove DEBUG_LOCKING define. Signed-off-by: Pranith Kumar --- translate-all.c | 50 +++++++++++++++++--------------------------------- 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/translate-all.c b/translate-all.c index cf828aa..a03f323 100644 --- a/translate-all.c +++ b/translate-all.c @@ -60,7 +60,6 @@ /* #define DEBUG_TB_INVALIDATE */ /* #define DEBUG_TB_FLUSH */ -/* #define DEBUG_LOCKING */ /* make various TB consistency checks */ /* #define DEBUG_TB_CHECK */ @@ -75,23 +74,13 @@ * access to the memory related structures are protected with the * mmap_lock. */ -#ifdef DEBUG_LOCKING -#define DEBUG_MEM_LOCKS 1 -#else -#define DEBUG_MEM_LOCKS 0 -#endif - #ifdef CONFIG_SOFTMMU #define assert_memory_lock() do { \ - if (DEBUG_MEM_LOCKS) { \ - g_assert(have_tb_lock); \ - } \ + tcg_debug_assert(have_tb_lock); \ } while (0) #else #define assert_memory_lock() do { \ - if (DEBUG_MEM_LOCKS) { \ - g_assert(have_mmap_lock()); \ - } \ + tcg_debug_assert(have_mmap_lock()); \ } while (0) #endif @@ -172,16 +161,24 @@ static void page_table_config_init(void) assert(v_l2_levels >= 0); } +#define assert_tb_locked() do { \ + tcg_debug_assert(have_tb_lock); \ + } while (0) + +#define assert_tb_unlocked() do { \ + tcg_debug_assert(!have_tb_lock); \ + } while (0) + void tb_lock(void) { - assert(!have_tb_lock); + assert_tb_unlocked(); qemu_mutex_lock(&tcg_ctx.tb_ctx.tb_lock); have_tb_lock++; } void tb_unlock(void) { - assert(have_tb_lock); + assert_tb_locked(); have_tb_lock--; qemu_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock); } @@ -194,19 +191,6 @@ void tb_lock_reset(void) } } -#ifdef DEBUG_LOCKING -#define DEBUG_TB_LOCKS 1 -#else -#define DEBUG_TB_LOCKS 0 -#endif - -#define assert_tb_lock() do { \ - if (DEBUG_TB_LOCKS) { \ - g_assert(have_tb_lock); \ - } \ - } while (0) - - static TranslationBlock *tb_find_pc(uintptr_t tc_ptr); void cpu_gen_init(void) @@ -840,7 +824,7 @@ static TranslationBlock *tb_alloc(target_ulong pc) { TranslationBlock *tb; - assert_tb_lock(); + assert_tb_locked(); if (tcg_ctx.tb_ctx.nb_tbs >= tcg_ctx.code_gen_max_blocks) { return NULL; @@ -855,7 +839,7 @@ static TranslationBlock *tb_alloc(target_ulong pc) /* Called with tb_lock held. */ void tb_free(TranslationBlock *tb) { - assert_tb_lock(); + assert_tb_locked(); /* In practice this is mostly used for single use temporary TB Ignore the hard cases and just back up if this TB happens to @@ -1097,7 +1081,7 @@ void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr) uint32_t h; tb_page_addr_t phys_pc; - assert_tb_lock(); + assert_tb_locked(); atomic_set(&tb->invalid, true); @@ -1412,7 +1396,7 @@ static void tb_invalidate_phys_range_1(tb_page_addr_t start, tb_page_addr_t end) #ifdef CONFIG_SOFTMMU void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end) { - assert_tb_lock(); + assert_tb_locked(); tb_invalidate_phys_range_1(start, end); } #else @@ -1455,7 +1439,7 @@ void tb_invalidate_phys_page_range(tb_page_addr_t start, tb_page_addr_t end, #endif /* TARGET_HAS_PRECISE_SMC */ assert_memory_lock(); - assert_tb_lock(); + assert_tb_locked(); p = page_find(start >> TARGET_PAGE_BITS); if (!p) { -- 2.10.2