[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 38/46] cpu: move cc->transaction_failed to tcg_ops
From: |
Claudio Fontana |
Subject: |
Re: [PULL 38/46] cpu: move cc->transaction_failed to tcg_ops |
Date: |
Wed, 24 Feb 2021 09:46:45 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 |
On 2/23/21 10:43 PM, Philippe Mathieu-Daudé wrote:
> On 2/5/21 11:56 PM, Richard Henderson wrote:
>> From: Claudio Fontana <cfontana@suse.de>
>>
>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
>> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
>> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>>
>> [claudio: wrap target code around CONFIG_TCG and !CONFIG_USER_ONLY]
>>
>> avoiding its use in headers used by common_ss code (should be poisoned).
>>
>> Note: need to be careful with the use of CONFIG_USER_ONLY,
>> Message-Id: <20210204163931.7358-11-cfontana@suse.de>
>> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
>> ---
>> include/hw/core/cpu.h | 28 +++++++++++++---------------
>> hw/mips/jazz.c | 9 +++++++--
>> target/alpha/cpu.c | 2 +-
>> target/arm/cpu.c | 4 ++--
>> target/m68k/cpu.c | 2 +-
>> target/microblaze/cpu.c | 2 +-
>> target/mips/cpu.c | 4 +++-
>> target/riscv/cpu.c | 2 +-
>> target/riscv/cpu_helper.c | 2 +-
>> target/sparc/cpu.c | 2 +-
>> target/xtensa/cpu.c | 2 +-
>> target/xtensa/helper.c | 4 ++--
>> 12 files changed, 34 insertions(+), 29 deletions(-)
>>
>> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
>> index 60cf20bf05..41ce1daefc 100644
>> --- a/include/hw/core/cpu.h
>> +++ b/include/hw/core/cpu.h
>> @@ -122,6 +122,14 @@ typedef struct TcgCpuOperations {
>> /** @debug_excp_handler: Callback for handling debug exceptions */
>> void (*debug_excp_handler)(CPUState *cpu);
>>
>> + /**
>> + * @do_transaction_failed: Callback for handling failed memory
>> transactions
>> + * (ie bus faults or external aborts; not MMU faults)
>> + */
>> + void (*do_transaction_failed)(CPUState *cpu, hwaddr physaddr, vaddr
>> addr,
>> + unsigned size, MMUAccessType access_type,
>> + int mmu_idx, MemTxAttrs attrs,
>> + MemTxResult response, uintptr_t retaddr);
>> } TcgCpuOperations;
>>
>> /**
>> @@ -133,8 +141,6 @@ typedef struct TcgCpuOperations {
>> * @has_work: Callback for checking if there is work to do.
>> * @do_unaligned_access: Callback for unaligned access handling, if
>> * the target defines #TARGET_ALIGNED_ONLY.
>> - * @do_transaction_failed: Callback for handling failed memory transactions
>> - * (ie bus faults or external aborts; not MMU faults)
>> * @virtio_is_big_endian: Callback to return %true if a CPU which supports
>> * runtime configurable endianness is currently big-endian. Non-configurable
>> * CPUs can use the default implementation of this method. This method
>> should
>> @@ -203,10 +209,6 @@ struct CPUClass {
>> void (*do_unaligned_access)(CPUState *cpu, vaddr addr,
>> MMUAccessType access_type,
>> int mmu_idx, uintptr_t retaddr);
>> - void (*do_transaction_failed)(CPUState *cpu, hwaddr physaddr, vaddr
>> addr,
>> - unsigned size, MMUAccessType access_type,
>> - int mmu_idx, MemTxAttrs attrs,
>> - MemTxResult response, uintptr_t retaddr);
>> bool (*virtio_is_big_endian)(CPUState *cpu);
>> int (*memory_rw_debug)(CPUState *cpu, vaddr addr,
>> uint8_t *buf, int len, bool is_write);
>> @@ -879,9 +881,6 @@ CPUState *cpu_by_arch_id(int64_t id);
>>
>> void cpu_interrupt(CPUState *cpu, int mask);
>>
>> -#ifdef NEED_CPU_H
>> -
>> -#ifdef CONFIG_SOFTMMU
>> static inline void cpu_unaligned_access(CPUState *cpu, vaddr addr,
>> MMUAccessType access_type,
>> int mmu_idx, uintptr_t retaddr)
>> @@ -900,14 +899,13 @@ static inline void cpu_transaction_failed(CPUState
>> *cpu, hwaddr physaddr,
>> {
>> CPUClass *cc = CPU_GET_CLASS(cpu);
>>
>> - if (!cpu->ignore_memory_transaction_failures &&
>> cc->do_transaction_failed) {
>> - cc->do_transaction_failed(cpu, physaddr, addr, size, access_type,
>> - mmu_idx, attrs, response, retaddr);
>> + if (!cpu->ignore_memory_transaction_failures &&
>> + cc->tcg_ops.do_transaction_failed) {
>> + cc->tcg_ops.do_transaction_failed(cpu, physaddr, addr, size,
>> + access_type, mmu_idx, attrs,
>> + response, retaddr);
>> }
>> }
>> -#endif
>> -
>> -#endif /* NEED_CPU_H */
>>
>> /**
>> * cpu_set_pc:
>> diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c
>> index f9442731dd..46c71a0ac8 100644
>> --- a/hw/mips/jazz.c
>> +++ b/hw/mips/jazz.c
>> @@ -116,6 +116,8 @@ static const MemoryRegionOps dma_dummy_ops = {
>> #define MAGNUM_BIOS_SIZE_MAX 0x7e000
>> #define MAGNUM_BIOS_SIZE
>> \
>> (BIOS_SIZE < MAGNUM_BIOS_SIZE_MAX ? BIOS_SIZE :
>> MAGNUM_BIOS_SIZE_MAX)
>> +
>> +#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
>> static void (*real_do_transaction_failed)(CPUState *cpu, hwaddr physaddr,
>> vaddr addr, unsigned size,
>> MMUAccessType access_type,
>> @@ -137,6 +139,7 @@ static void mips_jazz_do_transaction_failed(CPUState
>> *cs, hwaddr physaddr,
>> (*real_do_transaction_failed)(cs, physaddr, addr, size, access_type,
>> mmu_idx, attrs, response, retaddr);
>> }
>> +#endif /* CONFIG_TCG && !CONFIG_USER_ONLY */
>>
>> static void mips_jazz_init(MachineState *machine,
>> enum jazz_model_e jazz_model)
>> @@ -205,8 +208,10 @@ static void mips_jazz_init(MachineState *machine,
>> * memory region that catches all memory accesses, as we do on Malta.
>> */
>> cc = CPU_GET_CLASS(cpu);
>> - real_do_transaction_failed = cc->do_transaction_failed;
>> - cc->do_transaction_failed = mips_jazz_do_transaction_failed;
>> +#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
>> + real_do_transaction_failed = cc->tcg_ops.do_transaction_failed;
>> + cc->tcg_ops.do_transaction_failed = mips_jazz_do_transaction_failed;
>> +#endif /* CONFIG_TCG && !CONFIG_USER_ONLY */
>
> Why CONFIG_USER_ONLY isn't poisoned under hw/ ?
>
As I can see, hw/ contains a wide variety of objects, which go into hw_arch,
specific, softmmu or common.
There does not seem to be a common way to handle objects in hw/ .
In the case of hw/mips, it goes to hw_arch in meson.build, so it sees config
target.
Other users of CONFIG_USER_ONLY in hw/ are arm semihosting:
semihosting/arm-compat-semi.c which goes to specific_ss
and hw/cpu.c, which uses CONFIG_USER_ONLY but does not see it, since it is a
common_ss module.
So the uses of CONFIG_USER_ONLY in hw/cpu.c are wrong for sure, or at least
until hw/cpu.c goes to common_ss.
It does not hurt because the tests are in the negative, and those sysemu-only /
softmmu-only symbols are actually always visible, including for
CONFIG_USER_ONLY.
Ciao,
Claudio
- [PULL 27/46] tcg/tci: Fix TCG_REG_R4 misusage, (continued)
- [PULL 27/46] tcg/tci: Fix TCG_REG_R4 misusage, Richard Henderson, 2021/02/05
- [PULL 24/46] tcg/tci: Implement 64-bit division, Richard Henderson, 2021/02/05
- [PULL 30/46] target/riscv: remove CONFIG_TCG, as it is always TCG, Richard Henderson, 2021/02/05
- [PULL 31/46] accel/tcg: split TCG-only code from cpu_exec_realizefn, Richard Henderson, 2021/02/05
- [PULL 33/46] cpu: Move cpu_exec_* to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 34/46] cpu: Move tlb_fill to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 35/46] cpu: Move debug_excp_handler to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 36/46] target/arm: do not use cc->do_interrupt for KVM directly, Richard Henderson, 2021/02/05
- [PULL 38/46] cpu: move cc->transaction_failed to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 39/46] cpu: move do_unaligned_access to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 40/46] physmem: make watchpoint checking code TCG-only, Richard Henderson, 2021/02/05
- [PULL 37/46] cpu: move cc->do_interrupt to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 41/46] cpu: move adjust_watchpoint_address to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 42/46] cpu: move debug_check_watchpoint to tcg_ops, Richard Henderson, 2021/02/05
- [PULL 44/46] accel: extend AccelState and AccelClass to user-mode, Richard Henderson, 2021/02/05
- [PULL 43/46] cpu: tcg_ops: move to tcg-cpu-ops.h, keep a pointer in CPUClass, Richard Henderson, 2021/02/05
- [PULL 45/46] accel: replace struct CpusAccel with AccelOpsClass, Richard Henderson, 2021/02/05
- [PULL 46/46] accel: introduce AccelCPUClass extending CPUClass, Richard Henderson, 2021/02/05
- Re: [PULL 00/46] tcg patch queue, Peter Maydell, 2021/02/06