mttcg: translate-all: Enable locking debug in a debug build
PATCH 1/1 mttcg: translate-all: Enable locking debug in a debug build
Enable tcg lock debug asserts in a debug build by default instead of relying on DEBUG_LOCKING. None of the other DEBUG_* macros have asserts, so this patch removes DEBUG_LOCKING and enable these asserts in a debug build.
CC Richard Henderson <[email protected]>
CC Alex Bennée <[email protected]>
Signed-off-by Pranith Kumar <[email protected]>
--- translate-all.c | 49 ++++++++++++------------------------------------- 1 file changed, 12 insertions(+), 37 deletions(-)
translate-all.c +12 -37
@@ -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,24 +74,10 @@* 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); \ - } \ - } while (0) +#define assert_memory_lock () tcg_debug_assert(have_tb_lock)#else -#define assert_memory_lock () do { \ - if (DEBUG_MEM_LOCKS) { \ - g_assert(have_mmap_lock()); \ - } \ - } while (0) +#define assert_memory_lock () tcg_debug_assert(have_mmap_lock())#endif #define SMC_BITMAP_USE_THRESHOLD 10
@@ -172,16 +157,19 @@ static void page_table_config_init(void)assert (v_l2_levels >=0 ); } +#define assert_tb_locked () tcg_debug_assert(have_tb_lock) +#define assert_tb_unlocked () tcg_debug_assert(!have_tb_lock) +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 +182,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 +815,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 +830,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 +1072,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 +1387,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 +1430,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) {
Signature · 1 line
2.10.2
Quoted 8 lines · Pranith Kumar
Enable tcg lock debug asserts in a debug build by default instead of relying on
DEBUG_LOCKING. None of the other DEBUG_* macros have asserts, so this patch removesDEBUG_LOCKINGand enable these asserts in a debug build.CC Richard Henderson <[email protected]>CC Alex Bennée <[email protected]>Signed-off-by Pranith Kumar <[email protected]>
Reviewed-by Alex Bennée <[email protected]>
I'll pull it into my tree.
Quoted 122 lines
--- translate-all.c | 49 ++++++++++++------------------------------------- 1 file changed, 12 insertions(+), 37 deletions(-)translate-all.c +11
-36@@ -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,24 +74,10 @@* 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); \ - } \ - } while (0) +#define assert_memory_lock () tcg_debug_assert(have_tb_lock)#else -#define assert_memory_lock () do { \ - if (DEBUG_MEM_LOCKS) { \ - g_assert(have_mmap_lock()); \ - } \ - } while (0) +#define assert_memory_lock () tcg_debug_assert(have_mmap_lock())#endif #define SMC_BITMAP_USE_THRESHOLD 10@@ -172,16 +157,19 @@ static void page_table_config_init(void)assert (v_l2_levels >=0 ); } +#define assert_tb_locked () tcg_debug_assert(have_tb_lock) +#define assert_tb_unlocked () tcg_debug_assert(!have_tb_lock) +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 +182,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 +815,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 +830,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 +1072,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 +1387,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
translate-all.c void tb_invalidate_phys_page_range(tb_page_addr_t start, tb_page_addr_t end, · line 1436
Quoted 8 lines
translate-all.c +1
-1@@ -1455,7 +1430,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) {
--
Alex Bennée