Claudio Fontana <cfont...@suse.de> writes:
> 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, LGTM -- Alex Bennée