Message ID | 20180710160013.26559-3-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
Series | accel/tcg: Support execution from MMIO and small MMU regions | expand |
On 07/10/2018 09:00 AM, Peter Maydell wrote: > When we support execution from non-RAM MMIO regions, get_page_addr_code() > will return -1 to indicate that there is no RAM at the requested address. > Handle this in the cpu-exec TB hashtable lookup code, treating it as > "no match found". > > Note that the call to get_page_addr_code() in tb_lookup_cmp() needs > no changes -- a return of -1 will already correctly result in the > function returning false. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > accel/tcg/cpu-exec.c | 3 +++ > 1 file changed, 3 insertions(+) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On Tue, Jul 10, 2018 at 17:00:09 +0100, Peter Maydell wrote: > When we support execution from non-RAM MMIO regions, get_page_addr_code() > will return -1 to indicate that there is no RAM at the requested address. > Handle this in the cpu-exec TB hashtable lookup code, treating it as > "no match found". > > Note that the call to get_page_addr_code() in tb_lookup_cmp() needs > no changes -- a return of -1 will already correctly result in the > function returning false. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Emilio G. Cota <cota@braap.org> E.
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index c738b7f7d6e..6bcb6d99bd7 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -332,6 +332,9 @@ TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, desc.trace_vcpu_dstate = *cpu->trace_dstate; desc.pc = pc; phys_pc = get_page_addr_code(desc.env, pc); + if (phys_pc == -1) { + return NULL; + } desc.phys_page1 = phys_pc & TARGET_PAGE_MASK; h = tb_hash_func(phys_pc, pc, flags, cf_mask, *cpu->trace_dstate); return qht_lookup_custom(&tb_ctx.htable, &desc, h, tb_lookup_cmp);
When we support execution from non-RAM MMIO regions, get_page_addr_code() will return -1 to indicate that there is no RAM at the requested address. Handle this in the cpu-exec TB hashtable lookup code, treating it as "no match found". Note that the call to get_page_addr_code() in tb_lookup_cmp() needs no changes -- a return of -1 will already correctly result in the function returning false. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- accel/tcg/cpu-exec.c | 3 +++ 1 file changed, 3 insertions(+)