@samitouri / QOSamiQemu / commits / 9365fa1b43

target/s390x: Factor common s390_ipl_read/write() helpers

Prevent duplication factoring common helpers. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Jared Rossi <jrossi@linux.ibm.com> Message-Id: <20260616020839.19104-5-philmd@oss.qualcomm.com>

Philippe Mathieu-Daudé committed Oct 1, 2025 at 13:17 UTC 9365fa1b4391eb5524155c96e90842baebb5066b
1 file changed +23 -18
target/s390x/diag.c
+23 -18
@@ -73,11 +73,30 @@ static int diag308_parm_check(CPUS390XState *env, uint64_t r1, uint64_t addr,
73 return 0;
74 }
75
76 +static void s390_ipl_read(CPUS390XState *env, uint64_t addr,
77 + IplParameterBlock *iplb, size_t size)
78 +{
79 + if (s390_is_pv()) {
80 + s390_cpu_pv_mem_read(env_archcpu(env), 0, iplb, size);
81 + } else {
82 + cpu_physical_memory_read(addr, iplb, size);
83 + }
84 +}
85 +
86 +static void s390_ipl_write(CPUS390XState *env, uint64_t addr,
87 + IplParameterBlock *iplb, size_t size)
88 +{
89 + if (s390_is_pv()) {
90 + s390_cpu_pv_mem_write(env_archcpu(env), 0, iplb, size);
91 + } else {
92 + cpu_physical_memory_write(addr, iplb, size);
93 + }
94 +}
95 +
96 void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra)
97 {
98 bool valid;
99 CPUState *cs = env_cpu(env);
80 - S390CPU *cpu = env_archcpu(env);
100 uint64_t addr = env->regs[r1];
101 uint64_t subcode = env->regs[r3];
102 IplParameterBlock *iplb;
@@ -114,22 +133,12 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra)
133 return;
134 }
135 iplb = g_new0(IplParameterBlock, 1);
117 - if (!s390_is_pv()) {
118 - cpu_physical_memory_read(addr, iplb, sizeof(iplb->len));
119 - } else {
120 - s390_cpu_pv_mem_read(cpu, 0, iplb, sizeof(iplb->len));
121 - }
122 -
136 + s390_ipl_read(env, addr, iplb, sizeof(iplb->len));
137 if (!iplb_valid_len(iplb)) {
138 env->regs[r1 + 1] = DIAG_308_RC_INVALID;
139 goto out;
140 }
127 -
128 - if (!s390_is_pv()) {
129 - cpu_physical_memory_read(addr, iplb, be32_to_cpu(iplb->len));
130 - } else {
131 - s390_cpu_pv_mem_read(cpu, 0, iplb, be32_to_cpu(iplb->len));
132 - }
141 + s390_ipl_read(env, addr, iplb, be32_to_cpu(iplb->len));
142
143 valid = subcode == DIAG308_PV_SET ? iplb_valid_pv(iplb) : iplb_valid(iplb);
144 if (!valid) {
@@ -164,11 +173,7 @@ out:
173 return;
174 }
175
167 - if (!s390_is_pv()) {
168 - cpu_physical_memory_write(addr, iplb, be32_to_cpu(iplb->len));
169 - } else {
170 - s390_cpu_pv_mem_write(cpu, 0, iplb, be32_to_cpu(iplb->len));
171 - }
176 + s390_ipl_write(env, addr, iplb, be32_to_cpu(iplb->len));
177 env->regs[r1 + 1] = DIAG_308_RC_OK;
178 return;
179 case DIAG308_PV_START: