On 2/3/21 1:31 PM, Claudio Fontana wrote: > On 2/3/21 11:11 AM, Alex Bennée wrote: >> >> Claudio Fontana <cfont...@suse.de> writes: >> >>> From: Eduardo Habkost <ehabk...@redhat.com> >>> >>> Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> >>> >>> [claudio: wrapped target code in CONFIG_TCG] >>> Signed-off-by: Claudio Fontana <cfont...@suse.de> >>> --- >>> include/hw/core/cpu.h | 20 +++++++++++--------- >>> accel/tcg/cpu-exec.c | 4 ++-- >>> target/arm/cpu.c | 4 +++- >>> target/avr/cpu.c | 2 +- >>> target/hppa/cpu.c | 2 +- >>> target/i386/tcg/tcg-cpu.c | 2 +- >>> target/microblaze/cpu.c | 2 +- >>> target/mips/cpu.c | 4 +++- >>> target/riscv/cpu.c | 2 +- >>> target/rx/cpu.c | 2 +- >>> target/sh4/cpu.c | 2 +- >>> target/sparc/cpu.c | 2 +- >>> target/tricore/cpu.c | 2 +- >>> 13 files changed, 28 insertions(+), 22 deletions(-) >>> >>> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h >>> index d0b17dcc4c..b9803885e5 100644 >>> --- a/include/hw/core/cpu.h >>> +++ b/include/hw/core/cpu.h >>> @@ -86,6 +86,17 @@ typedef struct TcgCpuOperations { >>> * Called when the first CPU is realized. >>> */ >>> void (*initialize)(void); >>> + /** >>> + * @synchronize_from_tb: Synchronize state from a TCG #TranslationBlock >>> + * >>> + * This is called when we abandon execution of a TB before >>> + * starting it, and must set all parts of the CPU state which >>> + * the previous TB in the chain may not have updated. This >>> + * will need to do more. If this hook is not implemented then >>> + * the default is to call @set_pc(tb->pc). >>> + */ >>> + void (*synchronize_from_tb)(CPUState *cpu, >>> + const struct TranslationBlock *tb); >> >> Did you miss my comment last time or just not think it flowed better? >> >> ...TB in the chain may not have updated. By default when no hook is >> defined a call is made to @set_pc(tb->pc). If more state needs to be >> restored the front-end must provide a hook function and restore all the >> state there. >> >> Either way: >> >> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> >> > > Hi Alex, sorry for missing this change, can add it for the next respin, > > and thanks for looking at this, > > Ciao, > > Claudio
/** * @synchronize_from_tb: Synchronize state from a TCG #TranslationBlock * * This is called when we abandon execution of a TB before starting it, * and must set all parts of the CPU state which the previous TB in the * chain may not have updated. * By default, when this is NULL, a call is made to @set_pc(tb->pc). * * If more state needs to be restored, the target must implement a * function to restore all the state, and register it here. */ I changed the wording a bit, because to me it is easier to think about "target" than about "front-end", but maybe I am missing something. I am also not in love with the term hook, we are trying to end up with a proper interface, as we complete this series, a nice struct that the target can provide with all the functions necessary to implement the TCG operations. Let me know if this requires additional revision, Ciao, CLaudio