* [Qemu-devel] [PATCH] mttcg: translate-all: Enable locking debug in a debug build
@ 2016-11-29 6:35 Pranith Kumar
2016-11-29 7:54 ` Alex Bennée
0 siblings, 1 reply; 2+ messages in thread
From: Pranith Kumar @ 2016-11-29 6:35 UTC (permalink / raw)
To: alex.bennee; +Cc: qemu-devel, pbonzini, rth
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>
CC: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
---
translate-all.c | 49 ++++++++++++-------------------------------------
1 file changed, 12 insertions(+), 37 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index cf828aa..a3325dc 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,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) {
--
2.10.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH] mttcg: translate-all: Enable locking debug in a debug build
2016-11-29 6:35 [Qemu-devel] [PATCH] mttcg: translate-all: Enable locking debug in a debug build Pranith Kumar
@ 2016-11-29 7:54 ` Alex Bennée
0 siblings, 0 replies; 2+ messages in thread
From: Alex Bennée @ 2016-11-29 7:54 UTC (permalink / raw)
To: Pranith Kumar; +Cc: qemu-devel, pbonzini, rth
Pranith Kumar <bobby.prani@gmail.com> writes:
> 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>
> CC: Alex Bennée <alex.bennee@linaro.org>
> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
I'll pull it into my tree.
> ---
> translate-all.c | 49 ++++++++++++-------------------------------------
> 1 file changed, 12 insertions(+), 37 deletions(-)
>
> diff --git a/translate-all.c b/translate-all.c
> index cf828aa..a3325dc 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,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) {
--
Alex Bennée
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-11-29 7:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-29 6:35 [Qemu-devel] [PATCH] mttcg: translate-all: Enable locking debug in a debug build Pranith Kumar
2016-11-29 7:54 ` Alex Bennée
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.