On Thu, 1 Jun 2023 at 15:33, Antonio Caggiano <[email protected]> wrote: > > Instead of aborting immediately, try reading the physical address where > the instruction should be fetched by calling address_space_read. This > would give any memory regions ops callback a chance to allocate and/or > register an RAM/Alias memory region needed for resolving that physical > address. Then, if the memory transaction is OK, retry HVF execution at > the same PC.
What are the circumstances where this happens? Do we try to support this on KVM ? > Signed-off-by: Antonio Caggiano <[email protected]> > Co-authored-by: Mark Burton <[email protected]> > --- > target/arm/hvf/hvf.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c > index ad65603445..6e527254b1 100644 > --- a/target/arm/hvf/hvf.c > +++ b/target/arm/hvf/hvf.c > @@ -1446,6 +1446,18 @@ int hvf_vcpu_exec(CPUState *cpu) > hvf_raise_exception(cpu, EXCP_UDEF, syn_uncategorized()); > } > break; > + case EC_INSNABORT: { > + uint32_t sas = (syndrome >> 22) & 3; > + uint32_t len = 1 << sas; > + uint64_t val = 0; > + > + MemTxResult res = address_space_read( > + &address_space_memory, hvf_exit->exception.physical_address, > + MEMTXATTRS_UNSPECIFIED, &val, len); > + assert(res == MEMTX_OK); You can't assert() this, it might not be true, especially if we're here because hvf couldn't read from this address. > + flush_cpu_state(cpu); > + break; > + } > default: > cpu_synchronize_state(cpu); > trace_hvf_exit(syndrome, ec, env->pc); thanks -- PMM
