From: Philippe Mathieu-Daudé <[email protected]> Prevent duplication factoring common helpers.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> Reviewed-by: Richard Henderson <[email protected]> --- target/s390x/diag.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/target/s390x/diag.c b/target/s390x/diag.c index da44b0133ed..bc1791067d8 100644 --- a/target/s390x/diag.c +++ b/target/s390x/diag.c @@ -73,11 +73,30 @@ static int diag308_parm_check(CPUS390XState *env, uint64_t r1, uint64_t addr, return 0; } +static void s390_ipl_read(CPUS390XState *env, uint64_t addr, + IplParameterBlock *iplb, size_t size) +{ + if (s390_is_pv()) { + s390_cpu_pv_mem_read(env_archcpu(env), 0, iplb, size); + } else { + cpu_physical_memory_read(addr, iplb, size); + } +} + +static void s390_ipl_write(CPUS390XState *env, uint64_t addr, + IplParameterBlock *iplb, size_t size) +{ + if (s390_is_pv()) { + s390_cpu_pv_mem_write(env_archcpu(env), 0, iplb, size); + } else { + cpu_physical_memory_write(addr, iplb, size); + } +} + void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra) { bool valid; CPUState *cs = env_cpu(env); - S390CPU *cpu = env_archcpu(env); uint64_t addr = env->regs[r1]; uint64_t subcode = env->regs[r3]; IplParameterBlock *iplb; @@ -114,22 +133,12 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra) return; } iplb = g_new0(IplParameterBlock, 1); - if (!s390_is_pv()) { - cpu_physical_memory_read(addr, iplb, sizeof(iplb->len)); - } else { - s390_cpu_pv_mem_read(cpu, 0, iplb, sizeof(iplb->len)); - } - + s390_ipl_read(env, addr, iplb, sizeof(iplb->len)); if (!iplb_valid_len(iplb)) { env->regs[r1 + 1] = DIAG_308_RC_INVALID; goto out; } - - if (!s390_is_pv()) { - cpu_physical_memory_read(addr, iplb, be32_to_cpu(iplb->len)); - } else { - s390_cpu_pv_mem_read(cpu, 0, iplb, be32_to_cpu(iplb->len)); - } + s390_ipl_read(env, addr, iplb, be32_to_cpu(iplb->len)); valid = subcode == DIAG308_PV_SET ? iplb_valid_pv(iplb) : iplb_valid(iplb); if (!valid) { @@ -164,11 +173,7 @@ out: return; } - if (!s390_is_pv()) { - cpu_physical_memory_write(addr, iplb, be32_to_cpu(iplb->len)); - } else { - s390_cpu_pv_mem_write(cpu, 0, iplb, be32_to_cpu(iplb->len)); - } + s390_ipl_write(env, addr, iplb, be32_to_cpu(iplb->len)); env->regs[r1 + 1] = DIAG_308_RC_OK; return; case DIAG308_PV_START: -- 2.53.0
