[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 20/20] cputlb: Pass retaddr to tb_check_watchpoint
From: |
David Hildenbrand |
Subject: |
Re: [PATCH v3 20/20] cputlb: Pass retaddr to tb_check_watchpoint |
Date: |
Mon, 23 Sep 2019 10:54:25 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 |
On 22.09.19 05:54, Richard Henderson wrote:
> Fixes the previous TLB_WATCHPOINT patches because we are currently
> failing to set cpu->mem_io_pc with the call to cpu_check_watchpoint.
> Pass down the retaddr directly because it's readily available.
>
> Fixes: 50b107c5d61
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> accel/tcg/translate-all.h | 2 +-
> accel/tcg/translate-all.c | 6 +++---
> exec.c | 2 +-
> 3 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/accel/tcg/translate-all.h b/accel/tcg/translate-all.h
> index 135c1ea96a..a557b4e2bb 100644
> --- a/accel/tcg/translate-all.h
> +++ b/accel/tcg/translate-all.h
> @@ -30,7 +30,7 @@ void tb_invalidate_phys_page_fast(struct page_collection
> *pages,
> tb_page_addr_t start, int len,
> uintptr_t retaddr);
> void tb_invalidate_phys_page_range(tb_page_addr_t start, tb_page_addr_t end);
> -void tb_check_watchpoint(CPUState *cpu);
> +void tb_check_watchpoint(CPUState *cpu, uintptr_t retaddr);
>
> #ifdef CONFIG_USER_ONLY
> int page_unprotect(target_ulong address, uintptr_t pc);
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index db77fb221b..66d4bc4341 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -2142,16 +2142,16 @@ static bool tb_invalidate_phys_page(tb_page_addr_t
> addr, uintptr_t pc)
> #endif
>
> /* user-mode: call with mmap_lock held */
> -void tb_check_watchpoint(CPUState *cpu)
> +void tb_check_watchpoint(CPUState *cpu, uintptr_t retaddr)
> {
> TranslationBlock *tb;
>
> assert_memory_lock();
>
> - tb = tcg_tb_lookup(cpu->mem_io_pc);
> + tb = tcg_tb_lookup(retaddr);
> if (tb) {
> /* We can use retranslation to find the PC. */
> - cpu_restore_state_from_tb(cpu, tb, cpu->mem_io_pc, true);
> + cpu_restore_state_from_tb(cpu, tb, retaddr, true);
> tb_phys_invalidate(tb, -1);
> } else {
> /* The exception probably happened in a helper. The CPU state should
> diff --git a/exec.c b/exec.c
> index fed25d029b..ceeef4cd4b 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2724,7 +2724,7 @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr,
> vaddr len,
> cpu->watchpoint_hit = wp;
>
> mmap_lock();
> - tb_check_watchpoint(cpu);
> + tb_check_watchpoint(cpu, ra);
> if (wp->flags & BP_STOP_BEFORE_ACCESS) {
> cpu->exception_index = EXCP_DEBUG;
> mmap_unlock();
>
Finally, a lot of this stuff gets cleaned up :)
Reviewed-by: David Hildenbrand <address@hidden>
--
Thanks,
David / dhildenb
- [PATCH v3 15/20] cputlb: Merge and move memory_notdirty_write_{prepare, complete}, (continued)
- [PATCH v3 19/20] cputlb: Pass retaddr to tb_invalidate_phys_page_fast, Richard Henderson, 2019/09/21
- [PATCH v3 20/20] cputlb: Pass retaddr to tb_check_watchpoint, Richard Henderson, 2019/09/21
- Re: [PATCH v3 20/20] cputlb: Pass retaddr to tb_check_watchpoint,
David Hildenbrand <=
- Re: [PATCH v3 00/20] Move rom and notdirty handling to cputlb, Richard Henderson, 2019/09/22
- Re: [PATCH v3 00/20] Move rom and notdirty handling to cputlb, no-reply, 2019/09/22
- Re: [PATCH v3 00/20] Move rom and notdirty handling to cputlb, David Hildenbrand, 2019/09/23