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 <rth@twiddle.net> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com> [AJB: tweak ifdefs so can be early in series] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
		
							parent
							
								
									c6489dd921
								
							
						
					
					
						commit
						6ac3d7e845
					
				| 
						 | 
				
			
			@ -59,7 +59,6 @@
 | 
			
		|||
 | 
			
		||||
/* #define DEBUG_TB_INVALIDATE */
 | 
			
		||||
/* #define DEBUG_TB_FLUSH */
 | 
			
		||||
/* #define DEBUG_LOCKING */
 | 
			
		||||
/* make various TB consistency checks */
 | 
			
		||||
/* #define DEBUG_TB_CHECK */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -74,20 +73,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 { /* nothing */ } while (0)
 | 
			
		||||
#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
 | 
			
		||||
| 
						 | 
				
			
			@ -169,10 +158,18 @@ static void page_table_config_init(void)
 | 
			
		|||
    assert(v_l2_levels >= 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_USER_ONLY
 | 
			
		||||
#define assert_tb_locked() tcg_debug_assert(have_tb_lock)
 | 
			
		||||
#define assert_tb_unlocked() tcg_debug_assert(!have_tb_lock)
 | 
			
		||||
#else
 | 
			
		||||
#define assert_tb_locked()  do { /* nothing */ } while (0)
 | 
			
		||||
#define assert_tb_unlocked()  do { /* nothing */ } while (0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void tb_lock(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_USER_ONLY
 | 
			
		||||
    assert(!have_tb_lock);
 | 
			
		||||
    assert_tb_unlocked();
 | 
			
		||||
    qemu_mutex_lock(&tcg_ctx.tb_ctx.tb_lock);
 | 
			
		||||
    have_tb_lock++;
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +178,7 @@ void tb_lock(void)
 | 
			
		|||
void tb_unlock(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef CONFIG_USER_ONLY
 | 
			
		||||
    assert(have_tb_lock);
 | 
			
		||||
    assert_tb_locked();
 | 
			
		||||
    have_tb_lock--;
 | 
			
		||||
    qemu_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -197,23 +194,6 @@ void tb_lock_reset(void)
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG_LOCKING
 | 
			
		||||
#define DEBUG_TB_LOCKS 1
 | 
			
		||||
#else
 | 
			
		||||
#define DEBUG_TB_LOCKS 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_SOFTMMU
 | 
			
		||||
#define assert_tb_lock() do { /* nothing */ } while (0)
 | 
			
		||||
#else
 | 
			
		||||
#define assert_tb_lock() do {               \
 | 
			
		||||
        if (DEBUG_TB_LOCKS) {               \
 | 
			
		||||
            g_assert(have_tb_lock);         \
 | 
			
		||||
        }                                   \
 | 
			
		||||
    } while (0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static TranslationBlock *tb_find_pc(uintptr_t tc_ptr);
 | 
			
		||||
 | 
			
		||||
void cpu_gen_init(void)
 | 
			
		||||
| 
						 | 
				
			
			@ -847,7 +827,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;
 | 
			
		||||
| 
						 | 
				
			
			@ -862,7 +842,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
 | 
			
		||||
| 
						 | 
				
			
			@ -1104,7 +1084,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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1421,7 +1401,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
 | 
			
		||||
| 
						 | 
				
			
			@ -1464,7 +1444,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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue