[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 16/20] cputlb: Handle TLB_NOTDIRTY in probe_access
From: |
Richard Henderson |
Subject: |
[PATCH v3 16/20] cputlb: Handle TLB_NOTDIRTY in probe_access |
Date: |
Sat, 21 Sep 2019 20:54:54 -0700 |
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 6f685cb93a..6f4096bd0d 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);
--
2.17.1
- [PATCH v3 11/20] exec: Adjust notdirty tracing, (continued)
- [PATCH v3 11/20] exec: Adjust notdirty tracing, Richard Henderson, 2019/09/21
- [PATCH v3 10/20] cputlb: Introduce TLB_BSWAP, Richard Henderson, 2019/09/21
- [PATCH v3 12/20] cputlb: Move ROM handling from I/O path to TLB path, Richard Henderson, 2019/09/21
- [PATCH v3 13/20] cputlb: Move NOTDIRTY handling from I/O path to TLB path, Richard Henderson, 2019/09/21
- [PATCH v3 14/20] cputlb: Partially inline memory_region_section_get_iotlb, Richard Henderson, 2019/09/21
- [PATCH v3 16/20] cputlb: Handle TLB_NOTDIRTY in probe_access,
Richard Henderson <=
- [PATCH v3 15/20] cputlb: Merge and move memory_notdirty_write_{prepare, complete}, Richard Henderson, 2019/09/21
- [PATCH v3 17/20] cputlb: Remove cpu->mem_io_vaddr, Richard Henderson, 2019/09/21
- [PATCH v3 18/20] cputlb: Remove tb_invalidate_phys_page_range is_cpu_write_access, Richard Henderson, 2019/09/21
- [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