qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

cputlb: Use trace_mem_get_info instead of trace_mem_build_info

In the cpu_ldst templates, we already require a MemOp, and it
is cleaner and clearer to pass that instead of 3 separate
arguments describing the memory operation.

Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

+17 -17
+11 -11
include/exec/cpu_ldst_template.h
··· 86 86 RES_TYPE res; 87 87 target_ulong addr; 88 88 int mmu_idx = CPU_MMU_INDEX; 89 - TCGMemOpIdx oi; 89 + MemOp op = MO_TE | SHIFT; 90 90 #if !defined(SOFTMMU_CODE_ACCESS) 91 - uint16_t meminfo = trace_mem_build_info(SHIFT, false, MO_TE, false, mmu_idx); 91 + uint16_t meminfo = trace_mem_get_info(op, mmu_idx, false); 92 92 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); 93 93 #endif 94 94 ··· 96 96 entry = tlb_entry(env, mmu_idx, addr); 97 97 if (unlikely(entry->ADDR_READ != 98 98 (addr & (TARGET_PAGE_MASK | (DATA_SIZE - 1))))) { 99 - oi = make_memop_idx(SHIFT, mmu_idx); 99 + TCGMemOpIdx oi = make_memop_idx(op, mmu_idx); 100 100 res = glue(glue(helper_ret_ld, URETSUFFIX), MMUSUFFIX)(env, addr, 101 - oi, retaddr); 101 + oi, retaddr); 102 102 } else { 103 103 uintptr_t hostaddr = addr + entry->addend; 104 104 res = glue(glue(ld, USUFFIX), _p)((uint8_t *)hostaddr); ··· 125 125 int res; 126 126 target_ulong addr; 127 127 int mmu_idx = CPU_MMU_INDEX; 128 - TCGMemOpIdx oi; 129 - #if !defined(SOFTMMU_CODE_ACCESS) 130 - uint16_t meminfo = trace_mem_build_info(SHIFT, true, MO_TE, false, mmu_idx); 128 + MemOp op = MO_TE | MO_SIGN | SHIFT; 129 + #ifndef SOFTMMU_CODE_ACCESS 130 + uint16_t meminfo = trace_mem_get_info(op, mmu_idx, false); 131 131 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); 132 132 #endif 133 133 ··· 135 135 entry = tlb_entry(env, mmu_idx, addr); 136 136 if (unlikely(entry->ADDR_READ != 137 137 (addr & (TARGET_PAGE_MASK | (DATA_SIZE - 1))))) { 138 - oi = make_memop_idx(SHIFT, mmu_idx); 138 + TCGMemOpIdx oi = make_memop_idx(op & ~MO_SIGN, mmu_idx); 139 139 res = (DATA_STYPE)glue(glue(helper_ret_ld, SRETSUFFIX), 140 140 MMUSUFFIX)(env, addr, oi, retaddr); 141 141 } else { ··· 167 167 CPUTLBEntry *entry; 168 168 target_ulong addr; 169 169 int mmu_idx = CPU_MMU_INDEX; 170 - TCGMemOpIdx oi; 170 + MemOp op = MO_TE | SHIFT; 171 171 #if !defined(SOFTMMU_CODE_ACCESS) 172 - uint16_t meminfo = trace_mem_build_info(SHIFT, false, MO_TE, true, mmu_idx); 172 + uint16_t meminfo = trace_mem_get_info(op, mmu_idx, true); 173 173 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); 174 174 #endif 175 175 ··· 177 177 entry = tlb_entry(env, mmu_idx, addr); 178 178 if (unlikely(tlb_addr_write(entry) != 179 179 (addr & (TARGET_PAGE_MASK | (DATA_SIZE - 1))))) { 180 - oi = make_memop_idx(SHIFT, mmu_idx); 180 + TCGMemOpIdx oi = make_memop_idx(op, mmu_idx); 181 181 glue(glue(helper_ret_st, SUFFIX), MMUSUFFIX)(env, addr, v, oi, 182 182 retaddr); 183 183 } else {
+6 -6
include/exec/cpu_ldst_useronly_template.h
··· 70 70 ret = glue(glue(ld, USUFFIX), _p)(g2h(ptr)); 71 71 clear_helper_retaddr(); 72 72 #else 73 - uint16_t meminfo = trace_mem_build_info(SHIFT, false, MO_TE, false, 74 - MMU_USER_IDX); 73 + MemOp op = MO_TE | SHIFT; 74 + uint16_t meminfo = trace_mem_get_info(op, MMU_USER_IDX, false); 75 75 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); 76 76 ret = glue(glue(ld, USUFFIX), _p)(g2h(ptr)); 77 77 #endif ··· 102 102 ret = glue(glue(lds, SUFFIX), _p)(g2h(ptr)); 103 103 clear_helper_retaddr(); 104 104 #else 105 - uint16_t meminfo = trace_mem_build_info(SHIFT, true, MO_TE, false, 106 - MMU_USER_IDX); 105 + MemOp op = MO_TE | MO_SIGN | SHIFT; 106 + uint16_t meminfo = trace_mem_get_info(op, MMU_USER_IDX, false); 107 107 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); 108 108 ret = glue(glue(lds, SUFFIX), _p)(g2h(ptr)); 109 109 qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); ··· 131 131 glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr, 132 132 RES_TYPE v) 133 133 { 134 - uint16_t meminfo = trace_mem_build_info(SHIFT, false, MO_TE, true, 135 - MMU_USER_IDX); 134 + MemOp op = MO_TE | SHIFT; 135 + uint16_t meminfo = trace_mem_get_info(op, MMU_USER_IDX, true); 136 136 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); 137 137 glue(glue(st, SUFFIX), _p)(g2h(ptr), v); 138 138 qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo);