[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 12/16] cputlb: Handle TLB_NOTDIRTY in probe_access
From: |
David Hildenbrand |
Subject: |
Re: [PATCH v4 12/16] cputlb: Handle TLB_NOTDIRTY in probe_access |
Date: |
Tue, 24 Sep 2019 10:05:16 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 |
On 24.09.19 01:00, Richard Henderson wrote:
> We can use notdirty_write for the write and
> return a valid host pointer for this case.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> accel/tcg/cputlb.c | 26 +++++++++++++++++---------
> 1 file changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
> index 09b0df87c6..d0bdef1eb3 100644
> --- a/accel/tcg/cputlb.c
> +++ b/accel/tcg/cputlb.c
> @@ -1167,16 +1167,24 @@ void *probe_access(CPUArchState *env, target_ulong
> addr, int size,
> return NULL;
> }
>
> - /* Handle watchpoints. */
> - if (tlb_addr & TLB_WATCHPOINT) {
> - cpu_check_watchpoint(env_cpu(env), addr, size,
> - env_tlb(env)->d[mmu_idx].iotlb[index].attrs,
> - wp_access, retaddr);
> - }
> + if (unlikely(tlb_addr & TLB_FLAGS_MASK)) {
> + CPUIOTLBEntry *iotlbentry = &env_tlb(env)->d[mmu_idx].iotlb[index];
>
> - /* Reject I/O access, or other required slow-path. */
> - if (tlb_addr & (TLB_NOTDIRTY | TLB_MMIO | TLB_BSWAP | TLB_ROM)) {
> - return NULL;
> + /* Reject I/O access, or other required slow-path. */
> + if (tlb_addr & (TLB_MMIO | TLB_BSWAP | TLB_ROM)) {
> + return NULL;
> + }
> +
> + /* Handle watchpoints. */
> + if (tlb_addr & TLB_WATCHPOINT) {
> + cpu_check_watchpoint(env_cpu(env), addr, size,
> + iotlbentry->attrs, wp_access, retaddr);
> + }
> +
> + /* Handle clean RAM pages. */
> + if (tlb_addr & TLB_NOTDIRTY) {
> + notdirty_write(env_cpu(env), addr, size, iotlbentry, retaddr);
> + }
> }
>
> return (void *)((uintptr_t)addr + entry->addend);
>
Reviewed-by: David Hildenbrand <address@hidden>
--
Thanks,
David / dhildenb
- [PATCH v4 14/16] cputlb: Remove tb_invalidate_phys_page_range is_cpu_write_access, (continued)
- [PATCH v4 14/16] cputlb: Remove tb_invalidate_phys_page_range is_cpu_write_access, Richard Henderson, 2019/09/23
- [PATCH v4 11/16] cputlb: Merge and move memory_notdirty_write_{prepare, complete}, Richard Henderson, 2019/09/23
- [PATCH v4 15/16] cputlb: Pass retaddr to tb_invalidate_phys_page_fast, Richard Henderson, 2019/09/23
- [PATCH v4 09/16] cputlb: Move NOTDIRTY handling from I/O path to TLB path, Richard Henderson, 2019/09/23
- [PATCH v4 12/16] cputlb: Handle TLB_NOTDIRTY in probe_access, Richard Henderson, 2019/09/23
- [PATCH v4 10/16] cputlb: Partially inline memory_region_section_get_iotlb, Richard Henderson, 2019/09/23
- Re: [PATCH v4 10/16] cputlb: Partially inline memory_region_section_get_iotlb, Alex Bennée, 2019/09/25
- [PATCH v4 13/16] cputlb: Remove cpu->mem_io_vaddr, Richard Henderson, 2019/09/23
- [PATCH v4 16/16] cputlb: Pass retaddr to tb_check_watchpoint, Richard Henderson, 2019/09/23