Skip to content

Commit

Permalink
fixup! fixup! notdirty_write better hook check
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilippTakacs committed Oct 31, 2024
1 parent f350d8c commit 71f8bf0
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 24 deletions.
23 changes: 0 additions & 23 deletions qemu/accel/tcg/cputlb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1186,29 +1186,6 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr)
return get_page_addr_code_hostp(env, addr, NULL);
}

static bool uc_mem_hook_installed(struct uc_struct *uc, target_ulong paddr)
{
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_FETCH_UNMAPPED, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ_UNMAPPED, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ_PROT, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_FETCH_PROT, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ_AFTER, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_WRITE, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_WRITE_UNMAPPED, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_WRITE_PROT, paddr))
return true;
return false;
}

static void notdirty_write(CPUState *cpu, vaddr mem_vaddr, unsigned size,
CPUIOTLBEntry *iotlbentry, uintptr_t retaddr,
CPUTLBEntry *tlbe)
Expand Down
2 changes: 1 addition & 1 deletion qemu/accel/tcg/translate-all.c
Original file line number Diff line number Diff line change
Expand Up @@ -1839,7 +1839,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
}

/* Undoes tlb_set_dirty in notdirty_write. */
if (!(HOOK_EXISTS(cpu->uc, UC_HOOK_MEM_READ) || HOOK_EXISTS(cpu->uc, UC_HOOK_MEM_WRITE))) {
if (!uc_mem_hook_installed(cpu->uc, tb->pc)) {
tlb_reset_dirty_by_vaddr(cpu, pc & TARGET_PAGE_MASK,
(pc & ~TARGET_PAGE_MASK) + tb->size);
}
Expand Down
23 changes: 23 additions & 0 deletions qemu/include/exec/exec-all.h
Original file line number Diff line number Diff line change
Expand Up @@ -477,4 +477,27 @@ address_space_translate_for_iotlb(CPUState *cpu, int asidx, hwaddr addr,
hwaddr memory_region_section_get_iotlb(CPUState *cpu,
MemoryRegionSection *section);

static inline bool uc_mem_hook_installed(struct uc_struct *uc, target_ulong paddr)
{
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_FETCH_UNMAPPED, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ_UNMAPPED, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ_PROT, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_FETCH_PROT, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_READ_AFTER, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_WRITE, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_WRITE_UNMAPPED, paddr))
return true;
if (HOOK_EXISTS_BOUNDED(uc, UC_HOOK_MEM_WRITE_PROT, paddr))
return true;
return false;
}

#endif

0 comments on commit 71f8bf0

Please sign in to comment.