From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>,
qemu-riscv@nongnu.org,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Sagar Karandikar <sagark@eecs.berkeley.edu>,
Bastian Koppelmann <kbastian@mail.uni-paderborn.de>,
Richard Henderson <richard.henderson@linaro.org>,
qemu-devel@nongnu.org, Laurent Vivier <laurent@vivier.eu>,
qemu-arm@nongnu.org, Alistair Francis <Alistair.Francis@wdc.com>,
Claudio Fontana <cfontana@suse.de>,
Paolo Bonzini <pbonzini@redhat.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Aurelien Jarno <aurelien@aurel32.net>
Subject: Re: [RFC PATCH v2 5/6] accel/tcg: Refactor debugging tlb_assert_iotlb_entry_for_ptr_present()
Date: Mon, 08 Feb 2021 14:48:20 +0000 [thread overview]
Message-ID: <871rdqbol0.fsf@linaro.org> (raw)
In-Reply-To: <83c71866-2e28-2edb-d79d-f4f96bb765a1@amsat.org>
Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
> On 2/8/21 9:42 AM, Alex Bennée wrote:
>>
>> Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
>>
>>> Refactor debug code as tlb_assert_iotlb_entry_for_ptr_present() helper.
>>>
>>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>> ---
>>> What this code does is out of my league, but refactoring it allow
>>> keeping tlb_addr_write() local to accel/tcg/cputlb.c in the next
>>> patch.
>>
>> The assertion that the table entry is current is just a simple
>> housekeeping one. The details of how the MTE implementation uses
>> (abuses?) the iotlb entries requires a closer reading of the code.
>>
>>> ---
>>> include/exec/exec-all.h | 9 +++++++++
>>> accel/tcg/cputlb.c | 14 ++++++++++++++
>>> target/arm/mte_helper.c | 11 ++---------
>>> target/arm/sve_helper.c | 10 ++--------
>>> 4 files changed, 27 insertions(+), 17 deletions(-)
>>>
>>> diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
>>> index f933c74c446..c5e8e355b7f 100644
>>> --- a/include/exec/exec-all.h
>>> +++ b/include/exec/exec-all.h
>>> @@ -296,6 +296,15 @@ void tlb_set_page_with_attrs(CPUState *cpu, target_ulong vaddr,
>>> void tlb_set_page(CPUState *cpu, target_ulong vaddr,
>>> hwaddr paddr, int prot,
>>> int mmu_idx, target_ulong size);
>>> +
>>> +/*
>>> + * Find the iotlbentry for ptr. This *must* be present in the TLB
>>> + * because we just found the mapping.
>>> + */
>>> +void tlb_assert_iotlb_entry_for_ptr_present(CPUArchState *env, int ptr_mmu_idx,
>>> + uint64_t ptr,
>>> + MMUAccessType ptr_access,
>>> + uintptr_t index);
>>
>> Probably worth making this an empty inline for the non CONFIG_DEBUG_TCG
>> case so we can eliminate the call to an empty function.
>
> But then we can't make tlb_addr_write() static (next patch) and
> we still have to include "tcg/tcg.h" for the TCG_OVERSIZED_GUEST
> definition...
Hmm - yeah. I'm not keen on turning something into a function call when
the compiler should have all the information it needs with it. On the
other hand maybe we don't care for a debug assert.
Richard WDYT?
>
>>
>>> #else
>>> static inline void tlb_init(CPUState *cpu)
>>> {
>>> diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
>>> index 8a7b779270a..a6247da34a0 100644
>>> --- a/accel/tcg/cputlb.c
>>> +++ b/accel/tcg/cputlb.c
>>> @@ -429,6 +429,20 @@ void tlb_flush_all_cpus_synced(CPUState *src_cpu)
>>> tlb_flush_by_mmuidx_all_cpus_synced(src_cpu, ALL_MMUIDX_BITS);
>>> }
>>>
>>> +void tlb_assert_iotlb_entry_for_ptr_present(CPUArchState *env, int ptr_mmu_idx,
>>> + uint64_t ptr,
>>> + MMUAccessType ptr_access,
>>> + uintptr_t index)
>>> +{
>>> +#ifdef CONFIG_DEBUG_TCG
>>> + CPUTLBEntry *entry = tlb_entry(env, ptr_mmu_idx, ptr);
>>> + target_ulong comparator = (ptr_access == MMU_DATA_LOAD
>>> + ? entry->addr_read
>>> + : tlb_addr_write(entry));
>>> + g_assert(tlb_hit(comparator, ptr));
>>> +#endif
>>> +}
>>> +
>>> static bool tlb_hit_page_mask_anyprot(CPUTLBEntry *tlb_entry,
>>> target_ulong page, target_ulong mask)
>>> {
>>> diff --git a/target/arm/mte_helper.c b/target/arm/mte_helper.c
>>> index 6cea9d1b506..f47d3b4570e 100644
>>> --- a/target/arm/mte_helper.c
>>> +++ b/target/arm/mte_helper.c
>>> @@ -111,15 +111,8 @@ static uint8_t *allocation_tag_mem(CPUARMState *env, int ptr_mmu_idx,
>>> * matching tlb entry + iotlb entry.
>>> */
>>> index = tlb_index(env, ptr_mmu_idx, ptr);
>>> -# ifdef CONFIG_DEBUG_TCG
>>> - {
>>> - CPUTLBEntry *entry = tlb_entry(env, ptr_mmu_idx, ptr);
>>> - target_ulong comparator = (ptr_access == MMU_DATA_LOAD
>>> - ? entry->addr_read
>>> - : tlb_addr_write(entry));
>>> - g_assert(tlb_hit(comparator, ptr));
>>> - }
>>> -# endif
>>> + tlb_assert_iotlb_entry_for_ptr_present(env, ptr_mmu_idx, ptr,
>>> + ptr_access, index);
>>> iotlbentry = &env_tlb(env)->d[ptr_mmu_idx].iotlb[index];
>>>
>>> /* If the virtual page MemAttr != Tagged, access unchecked. */
>>> diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c
>>> index c8cdf7618eb..a5708da0f2f 100644
>>> --- a/target/arm/sve_helper.c
>>> +++ b/target/arm/sve_helper.c
>>> @@ -4089,14 +4089,8 @@ static bool sve_probe_page(SVEHostPage *info, bool nofault,
>>> {
>>> uintptr_t index = tlb_index(env, mmu_idx, addr);
>>>
>>> -# ifdef CONFIG_DEBUG_TCG
>>> - CPUTLBEntry *entry = tlb_entry(env, mmu_idx, addr);
>>> - target_ulong comparator = (access_type == MMU_DATA_LOAD
>>> - ? entry->addr_read
>>> - : tlb_addr_write(entry));
>>> - g_assert(tlb_hit(comparator, addr));
>>> -# endif
>>> -
>>> + tlb_assert_iotlb_entry_for_ptr_present(env, mmu_idx, addr,
>>> + access_type, index);
>>> CPUIOTLBEntry *iotlbentry = &env_tlb(env)->d[mmu_idx].iotlb[index];
>>> info->attrs = iotlbentry->attrs;
>>> }
>>
>> with the inline fix:
>>
>> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
>>
--
Alex Bennée
next prev parent reply other threads:[~2021-02-08 14:51 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-07 23:23 [RFC PATCH v2 0/6] exec: Remove "tcg/tcg.h" from "exec/cpu_ldst.h" Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` [RFC PATCH v2 1/6] target: Replace tcg_debug_assert() by assert() Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-08 13:54 ` Alex Bennée
2021-02-08 13:54 ` Alex Bennée
2021-02-07 23:23 ` [PATCH v2 2/6] target/m68k: Include missing "tcg/tcg.h" header Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` [PATCH v2 3/6] target/mips: " Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-20 20:07 ` Philippe Mathieu-Daudé
2021-02-20 20:07 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` [PATCH v2 4/6] accel/tcg: " Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-08 14:36 ` Alex Bennée
2021-02-08 14:36 ` Alex Bennée
2021-02-07 23:23 ` [RFC PATCH v2 5/6] accel/tcg: Refactor debugging tlb_assert_iotlb_entry_for_ptr_present() Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-08 8:42 ` Alex Bennée
2021-02-08 8:42 ` Alex Bennée
2021-02-08 13:52 ` Philippe Mathieu-Daudé
2021-02-08 14:48 ` Alex Bennée [this message]
2021-02-08 22:34 ` Richard Henderson
2021-02-07 23:23 ` [PATCH v2 6/6] exec/cpu_ldst: Move tlb* declarations to "exec/exec-all.h" Philippe Mathieu-Daudé
2021-02-07 23:23 ` Philippe Mathieu-Daudé
2021-02-08 14:40 ` Alex Bennée
2021-02-08 14:40 ` Alex Bennée
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=871rdqbol0.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=Alistair.Francis@wdc.com \
--cc=aleksandar.rikalo@syrmia.com \
--cc=aurelien@aurel32.net \
--cc=cfontana@suse.de \
--cc=f4bug@amsat.org \
--cc=kbastian@mail.uni-paderborn.de \
--cc=laurent@vivier.eu \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sagark@eecs.berkeley.edu \
--cc=ysato@users.sourceforge.jp \
/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.