[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 3/6] target/s390x: Diagnose specification exc
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH v2 3/6] target/s390x: Diagnose specification exception for atomics |
Date: |
Tue, 9 May 2017 01:56:03 +0200 |
User-agent: |
NeoMutt/20170113 (1.7.2) |
On 2017-05-08 08:17, Richard Henderson wrote:
> All of the interlocked access facility instructions raise a
> specification exception for unaligned accesses. Do this by
> using the (previously unused) unaligned_access hook.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> target/s390x/cpu.c | 1 +
> target/s390x/cpu.h | 3 +++
> target/s390x/helper.c | 16 ++++++++++++++++
> 3 files changed, 20 insertions(+)
>
> diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
> index 066dcd1..a1bf2ba 100644
> --- a/target/s390x/cpu.c
> +++ b/target/s390x/cpu.c
> @@ -430,6 +430,7 @@ static void s390_cpu_class_init(ObjectClass *oc, void
> *data)
> cc->write_elf64_note = s390_cpu_write_elf64_note;
> cc->cpu_exec_interrupt = s390_cpu_exec_interrupt;
> cc->debug_excp_handler = s390x_cpu_debug_excp_handler;
> + cc->do_unaligned_access = s390x_cpu_do_unaligned_access;
> #endif
> cc->disas_set_info = s390_cpu_disas_set_info;
>
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index 058ddad..bbed320 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -480,6 +480,9 @@ int s390_cpu_handle_mmu_fault(CPUState *cpu, vaddr
> address, int rw,
>
> #ifndef CONFIG_USER_ONLY
> void do_restart_interrupt(CPUS390XState *env);
> +void s390x_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
> + MMUAccessType access_type,
> + int mmu_idx, uintptr_t retaddr);
>
> static inline hwaddr decode_basedisp_s(CPUS390XState *env, uint32_t ipb,
> uint8_t *ar)
> diff --git a/target/s390x/helper.c b/target/s390x/helper.c
> index 68bd2f9..9978490 100644
> --- a/target/s390x/helper.c
> +++ b/target/s390x/helper.c
> @@ -718,4 +718,20 @@ void s390x_cpu_debug_excp_handler(CPUState *cs)
> cpu_loop_exit_noexc(cs);
> }
> }
> +
> +/* Unaligned accesses are only diagnosed with MO_ALIGN. At the moment,
> + this is only for the atomic operations, for which we want to raise a
> + specification exception. */
> +void s390x_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
> + MMUAccessType access_type,
> + int mmu_idx, uintptr_t retaddr)
> +{
> + S390CPU *cpu = S390_CPU(cs);
> + CPUS390XState *env = &cpu->env;
> +
> + if (retaddr) {
> + cpu_restore_state(cs, retaddr);
> + }
> + program_interrupt(env, PGM_SPECIFICATION, ILEN_LATER);
> +}
> #endif /* CONFIG_USER_ONLY */
Reviewed-by: Aurelien Jarno <address@hidden>
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
address@hidden http://www.aurel32.net
[Qemu-devel] [PATCH v2 2/6] target/s390x: Implement LOAD PROGRAM PARAMETER, Richard Henderson, 2017/05/08
[Qemu-devel] [PATCH v2 3/6] target/s390x: Diagnose specification exception for atomics, Richard Henderson, 2017/05/08
- Re: [Qemu-devel] [PATCH v2 3/6] target/s390x: Diagnose specification exception for atomics,
Aurelien Jarno <=
[Qemu-devel] [PATCH v2 4/6] target/s390x: Implement LOAD PAIR DISJOINT, Richard Henderson, 2017/05/08
[Qemu-devel] [PATCH v2 5/6] target/s390x: Use atomic operations for COMPARE SWAP, Richard Henderson, 2017/05/08
[Qemu-devel] [PATCH v2 6/6] target/s390x: Use atomic operations for LOAD AND OP, Richard Henderson, 2017/05/08
Re: [Qemu-devel] [PATCH v2 0/6] target/s390x patches, no-reply, 2017/05/08