From: "Alex Bennée" <alex.bennee@linaro.org>
To: Pranith Kumar <bobby.prani@gmail.com>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH] translate-all: Enable locking debug in a debug build
Date: Wed, 16 Nov 2016 15:57:39 +0000 [thread overview]
Message-ID: <878tsjto24.fsf@linaro.org> (raw)
In-Reply-To: <20161116153705.30206-1-bobby.prani@gmail.com>
Pranith Kumar <bobby.prani@gmail.com> writes:
> Unconditionally enable locking checks in debug builds so that we get
> wider testing. Using tcg_debug_assert() allows us to remove
> DEBUG_LOCKING define.
Interesting. The other option would be to add a debug build to
.travis.yml that define this (and others) with -DFOO_DEBUG.
>
> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
> ---
> 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 */
So if we are enabling this for tcg_debug builds why not the other cases?
>
> @@ -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
> -
In retrospect I should probably of had a comment in here about the roll
of tb_lock in CONFIG_SOFTMMU versus the mmap_lock.
> #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)
> +
I'm not sure we need all this multi-line stuff for a simple
substitution? Richard?
> void tb_lock(void)
> {
> - assert(!have_tb_lock);
> + assert_tb_unlocked();
Hmm why introduce a helper for exactly one use?
> 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) {
--
Alex Bennée
next prev parent reply other threads:[~2016-11-16 15:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-16 15:37 [Qemu-devel] [PATCH] translate-all: Enable locking debug in a debug build Pranith Kumar
2016-11-16 15:57 ` Alex Bennée [this message]
2016-11-16 20:10 ` Richard Henderson
2016-11-16 20:46 ` Pranith Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878tsjto24.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=bobby.prani@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.