[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/29] softmmu: Add probe_write()
From: |
Leon Alrae |
Subject: |
[Qemu-devel] [PULL 05/29] softmmu: Add probe_write() |
Date: |
Fri, 12 Jun 2015 10:35:12 +0100 |
From: Yongbok Kim <address@hidden>
Probe for whether the specified guest write access is permitted.
If it is not permitted then an exception will be taken in the same
way as if this were a real write access (and we will not return).
Otherwise the function will return, and there will be a valid
entry in the TLB for this access.
Signed-off-by: Yongbok Kim <address@hidden>
Reviewed-by: Leon Alrae <address@hidden>
Signed-off-by: Leon Alrae <address@hidden>
---
include/exec/exec-all.h | 2 ++
softmmu_template.h | 22 ++++++++++++++++++++++
2 files changed, 24 insertions(+)
diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 2f7a4f1..2573e8c 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -105,6 +105,8 @@ void tlb_set_page_with_attrs(CPUState *cpu, target_ulong
vaddr,
hwaddr paddr, MemTxAttrs attrs,
int prot, int mmu_idx, target_ulong size);
void tb_invalidate_phys_addr(AddressSpace *as, hwaddr addr);
+void probe_write(CPUArchState *env, target_ulong addr, int mmu_idx,
+ uintptr_t retaddr);
#else
static inline void tlb_flush_page(CPUState *cpu, target_ulong addr)
{
diff --git a/softmmu_template.h b/softmmu_template.h
index 39f571b..d42d89d 100644
--- a/softmmu_template.h
+++ b/softmmu_template.h
@@ -548,6 +548,28 @@ glue(glue(helper_st, SUFFIX), MMUSUFFIX)(CPUArchState
*env, target_ulong addr,
helper_te_st_name(env, addr, val, oi, GETRA());
}
+#if DATA_SIZE == 1
+/* Probe for whether the specified guest write access is permitted.
+ * If it is not permitted then an exception will be taken in the same
+ * way as if this were a real write access (and we will not return).
+ * Otherwise the function will return, and there will be a valid
+ * entry in the TLB for this access.
+ */
+void probe_write(CPUArchState *env, target_ulong addr, int mmu_idx,
+ uintptr_t retaddr)
+{
+ int index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
+ target_ulong tlb_addr = env->tlb_table[mmu_idx][index].addr_write;
+
+ if ((addr & TARGET_PAGE_MASK)
+ != (tlb_addr & (TARGET_PAGE_MASK | TLB_INVALID_MASK))) {
+ /* TLB entry is for a different page */
+ if (!VICTIM_TLB_HIT(addr_write)) {
+ tlb_fill(ENV_GET_CPU(env), addr, MMU_DATA_STORE, mmu_idx, retaddr);
+ }
+ }
+}
+#endif
#endif /* !defined(SOFTMMU_CODE_ACCESS) */
#undef READ_ACCESS_TYPE
--
2.1.0
- [Qemu-devel] [PULL 00/29] target-mips queue, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 01/29] target-mips: move group of functions above gen_load_fpr32(), Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 03/29] mips_malta: provide ememsize env variable to kernels, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 05/29] softmmu: Add probe_write(),
Leon Alrae <=
- [Qemu-devel] [PULL 04/29] target-mips: Misaligned memory accesses for R6, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 08/29] mips jazz: compile only in 64 bit, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 07/29] target-mips: add ERETNC instruction and Config5.LLB bit, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 12/29] dma/rc4030: document register at offset 0x210, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 06/29] target-mips: Misaligned memory accesses for MSA, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 11/29] dma/rc4030: do not use old_mmio accesses, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 09/29] dma/rc4030: create custom DMA address space, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 15/29] net/dp8393x: always calculate proper checksums, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 13/29] dma/rc4030: use trace events instead of custom logging, Leon Alrae, 2015/06/12
- [Qemu-devel] [PULL 02/29] target-mips: add Config5.FRE support allowing Status.FR=0 emulation, Leon Alrae, 2015/06/12