qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2] s390x: Properly fetch the short psw on diag308 subc 0/1


From: David Hildenbrand
Subject: Re: [PATCH v2] s390x: Properly fetch the short psw on diag308 subc 0/1
Date: Mon, 11 Nov 2019 18:05:37 +0100


> Am 11.11.2019 um 16:28 schrieb Janosch Frank <address@hidden>:
> 
> We need to actually fetch the cpu mask and set it. As we invert the
> short psw indication in the mask, SIE will report a specification
> exception, if it wasn't present in the reset psw.
> 
> Signed-off-by: Janosch Frank <address@hidden>
> ---
> target/s390x/cpu.c | 12 ++++++++++--
> target/s390x/cpu.h |  1 +
> 2 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
> index 736a7903e2..40aa42e092 100644
> --- a/target/s390x/cpu.c
> +++ b/target/s390x/cpu.c
> @@ -76,8 +76,16 @@ static bool s390_cpu_has_work(CPUState *cs)
> static void s390_cpu_load_normal(CPUState *s)
> {
>     S390CPU *cpu = S390_CPU(s);
> -    cpu->env.psw.addr = ldl_phys(s->as, 4) & PSW_MASK_ESA_ADDR;
> -    cpu->env.psw.mask = PSW_MASK_32 | PSW_MASK_64;
> +    uint64_t spsw = ldq_phys(s->as, 0);
> +
> +    cpu->env.psw.mask = spsw & 0xffffffff80000000UL;

ULL

> +    /*
> +     * Invert short psw indication, so SIE will report a specification
> +     * exception if it was not set.
> +     */

It would be interesting to know how the PSW mask in the PGM old PSW looks like 
on LPAR. IOW, „you forgot to set the short indication, here is an exception. 
see, the short indication is set now.“ Sounds weird, most probably nobody cares.

> +    cpu->env.psw.mask ^= PSW_MASK_SHORTPSW;
> +    cpu->env.psw.addr = spsw & 0x7fffffffUL;

Eventually also ULL

> +
>     s390_cpu_set_state(S390_CPU_STATE_OPERATING, cpu);
> }
> #endif
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index 947553386f..2c687185f1 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -261,6 +261,7 @@ extern const struct VMStateDescription vmstate_s390_cpu;
> #define PSW_MASK_EXT            0x0100000000000000ULL
> #define PSW_MASK_KEY            0x00F0000000000000ULL
> #define PSW_SHIFT_KEY           52
> +#define PSW_MASK_SHORTPSW    0x0008000000000000ULL
> #define PSW_MASK_MCHECK         0x0004000000000000ULL
> #define PSW_MASK_WAIT           0x0002000000000000ULL
> #define PSW_MASK_PSTATE         0x0001000000000000ULL
> -- 
> 2.20.1
> 

Looks good to me

Reviewed-by: David Hildenbrand <address@hidden>




reply via email to

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