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

target/i386: Use cpu_*_mmuidx_ra instead of templates

Do not use exec/cpu_ldst_{,useronly_}template.h directly,
but instead use the functional interface.

Cc: Eduardo Habkost <ehabkost@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

+28 -28
+28 -28
target/i386/seg_helper.c
··· 37 37 # define LOG_PCALL_STATE(cpu) do { } while (0) 38 38 #endif 39 39 40 - #ifdef CONFIG_USER_ONLY 41 - #define MEMSUFFIX _kernel 42 - #define DATA_SIZE 1 43 - #include "exec/cpu_ldst_useronly_template.h" 44 - 45 - #define DATA_SIZE 2 46 - #include "exec/cpu_ldst_useronly_template.h" 47 - 48 - #define DATA_SIZE 4 49 - #include "exec/cpu_ldst_useronly_template.h" 50 - 51 - #define DATA_SIZE 8 52 - #include "exec/cpu_ldst_useronly_template.h" 53 - #undef MEMSUFFIX 54 - #else 55 - #define CPU_MMU_INDEX (cpu_mmu_index_kernel(env)) 56 - #define MEMSUFFIX _kernel 57 - #define DATA_SIZE 1 58 - #include "exec/cpu_ldst_template.h" 40 + /* 41 + * TODO: Convert callers to compute cpu_mmu_index_kernel once 42 + * and use *_mmuidx_ra directly. 43 + */ 44 + #define cpu_ldub_kernel_ra(e, p, r) \ 45 + cpu_ldub_mmuidx_ra(e, p, cpu_mmu_index_kernel(e), r) 46 + #define cpu_lduw_kernel_ra(e, p, r) \ 47 + cpu_lduw_mmuidx_ra(e, p, cpu_mmu_index_kernel(e), r) 48 + #define cpu_ldl_kernel_ra(e, p, r) \ 49 + cpu_ldl_mmuidx_ra(e, p, cpu_mmu_index_kernel(e), r) 50 + #define cpu_ldq_kernel_ra(e, p, r) \ 51 + cpu_ldq_mmuidx_ra(e, p, cpu_mmu_index_kernel(e), r) 59 52 60 - #define DATA_SIZE 2 61 - #include "exec/cpu_ldst_template.h" 53 + #define cpu_stb_kernel_ra(e, p, v, r) \ 54 + cpu_stb_mmuidx_ra(e, p, v, cpu_mmu_index_kernel(e), r) 55 + #define cpu_stw_kernel_ra(e, p, v, r) \ 56 + cpu_stw_mmuidx_ra(e, p, v, cpu_mmu_index_kernel(e), r) 57 + #define cpu_stl_kernel_ra(e, p, v, r) \ 58 + cpu_stl_mmuidx_ra(e, p, v, cpu_mmu_index_kernel(e), r) 59 + #define cpu_stq_kernel_ra(e, p, v, r) \ 60 + cpu_stq_mmuidx_ra(e, p, v, cpu_mmu_index_kernel(e), r) 62 61 63 - #define DATA_SIZE 4 64 - #include "exec/cpu_ldst_template.h" 62 + #define cpu_ldub_kernel(e, p) cpu_ldub_kernel_ra(e, p, 0) 63 + #define cpu_lduw_kernel(e, p) cpu_lduw_kernel_ra(e, p, 0) 64 + #define cpu_ldl_kernel(e, p) cpu_ldl_kernel_ra(e, p, 0) 65 + #define cpu_ldq_kernel(e, p) cpu_ldq_kernel_ra(e, p, 0) 65 66 66 - #define DATA_SIZE 8 67 - #include "exec/cpu_ldst_template.h" 68 - #undef CPU_MMU_INDEX 69 - #undef MEMSUFFIX 70 - #endif 67 + #define cpu_stb_kernel(e, p, v) cpu_stb_kernel_ra(e, p, v, 0) 68 + #define cpu_stw_kernel(e, p, v) cpu_stw_kernel_ra(e, p, v, 0) 69 + #define cpu_stl_kernel(e, p, v) cpu_stl_kernel_ra(e, p, v, 0) 70 + #define cpu_stq_kernel(e, p, v) cpu_stq_kernel_ra(e, p, v, 0) 71 71 72 72 /* return non zero if error */ 73 73 static inline int load_segment_ra(CPUX86State *env, uint32_t *e1_ptr,