[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v13 02/24] mttcg: translate-all: Enable locking debu
From: |
Alex Bennée |
Subject: |
[Qemu-devel] [PATCH v13 02/24] mttcg: translate-all: Enable locking debug in a debug build |
Date: |
Wed, 22 Feb 2017 17:13:05 +0000 |
From: Pranith Kumar <address@hidden>
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 <address@hidden>
Signed-off-by: Pranith Kumar <address@hidden>
[AJB: tweak ifdefs so can be early in series]
Signed-off-by: Alex Bennée <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
---
translate-all.c | 52 ++++++++++++++++------------------------------------
1 file changed, 16 insertions(+), 36 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index 5f44ec844e..8a861cb583 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -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) {
--
2.11.0
- [Qemu-devel] [PATCH v13 00/24] MTTCG Base enabling patches with ARM enablement, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 02/24] mttcg: translate-all: Enable locking debug in a debug build,
Alex Bennée <=
- [Qemu-devel] [PATCH v13 03/24] mttcg: Add missing tb_lock/unlock() in cpu_exec_step(), Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 04/24] tcg: move TCG_MO/BAR types into own file, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 06/24] tcg: add kick timer for single-threaded vCPU emulation, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 01/24] docs: new design document multi-thread-tcg.txt, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 07/24] tcg: rename tcg_current_cpu to tcg_current_rr_cpu, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 05/24] tcg: add options for enabling MTTCG, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 09/24] tcg: remove global exit_request, Alex Bennée, 2017/02/22
- [Qemu-devel] [PATCH v13 14/24] cputlb: tweak qemu_ram_addr_from_host_nofail reporting, Alex Bennée, 2017/02/22