qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v15 04/23] cpu: Move synchronize_from_tb() to tcg_ops


From: Claudio Fontana
Subject: Re: [PATCH v15 04/23] cpu: Move synchronize_from_tb() to tcg_ops
Date: Thu, 4 Feb 2021 12:18:30 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0

On 2/3/21 1:31 PM, Claudio Fontana wrote:
> On 2/3/21 11:11 AM, Alex Bennée wrote:
>>
>> Claudio Fontana <cfontana@suse.de> writes:
>>
>>> From: Eduardo Habkost <ehabkost@redhat.com>
>>>
>>> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
>>>
>>> [claudio: wrapped target code in CONFIG_TCG]
>>> Signed-off-by: Claudio Fontana <cfontana@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.bennee@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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]