[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: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PULL 38/46] cpu: move cc->transaction_failed to tcg_ops |
Date: |
Tue, 23 Feb 2021 22:43:39 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0 |
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/ ?
- [PULL 29/46] cpu: Introduce TCGCpuOperations struct, (continued)
- [PULL 29/46] cpu: Introduce TCGCpuOperations struct, Richard Henderson, 2021/02/05
- [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
- Re: [PULL 38/46] cpu: move cc->transaction_failed to tcg_ops,
Philippe Mathieu-Daudé <=
- [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