@samitouri / QOSamiQemu / commits / 734bd83030

target/mips: Reduce CPUState scope when used with CPU_FOREACH()

When possible, reduce CPUState variable scope. Prefer cpu_env(cpu) over &cpu->env. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> Message-Id: <20260415215539.92629-8-philmd@linaro.org>

Philippe Mathieu-Daudé committed May 6, 2026 at 14:37 UTC 734bd8303027cfc566c9507b08ceff9d3bc2cd71
3 files changed +25 -21
target/mips/internal.h
+6 -5
@@ -280,7 +280,7 @@ static inline int mips_vpe_active(CPUMIPSState *env)
280
281 static inline int mips_vp_active(CPUMIPSState *env)
282 {
283 - CPUState *other_cs = first_cpu;
283 + CPUState *cs = first_cpu;
284
285 /* Check if the VP disabled other VPs (which means the VP is enabled) */
286 if ((env->CP0_VPControl >> CP0VPCtl_DIS) & 1) {
@@ -288,10 +288,11 @@ static inline int mips_vp_active(CPUMIPSState *env)
288 }
289
290 /* Check if the virtual processor is disabled due to a DVP */
291 - CPU_FOREACH(other_cs) {
292 - MIPSCPU *other_cpu = MIPS_CPU(other_cs);
293 - if ((&other_cpu->env != env) &&
294 - ((other_cpu->env.CP0_VPControl >> CP0VPCtl_DIS) & 1)) {
291 + CPU_FOREACH(cs) {
292 + CPUMIPSState *other_env = cpu_env(cs);
293 +
294 + if ((other_env != env) &&
295 + ((other_env->CP0_VPControl >> CP0VPCtl_DIS) & 1)) {
296 return 0;
297 }
298 }
target/mips/tcg/system/cp0_helper.c
+16 -12
@@ -1566,13 +1566,14 @@ target_ulong helper_emt(void)
1566
1567 target_ulong helper_dvpe(CPUMIPSState *env)
1568 {
1569 - CPUState *other_cs = first_cpu;
1569 MIPSCPU *cpu = env_archcpu(env);
1570 target_ulong prev = cpu->mvp->CP0_MVPControl;
1571
1572 if (env->CP0_VPEConf0 & (1 << CP0VPEC0_MVP)) {
1574 - CPU_FOREACH(other_cs) {
1575 - MIPSCPU *other_cpu = MIPS_CPU(other_cs);
1573 + CPUState *cs = first_cpu;
1574 +
1575 + CPU_FOREACH(cs) {
1576 + MIPSCPU *other_cpu = MIPS_CPU(cs);
1577 /* Turn off all VPEs except the one executing the dvpe. */
1578 if (&other_cpu->env != env) {
1579 other_cpu->mvp->CP0_MVPControl &= ~(1 << CP0MVPCo_EVP);
@@ -1585,13 +1586,14 @@ target_ulong helper_dvpe(CPUMIPSState *env)
1586
1587 target_ulong helper_evpe(CPUMIPSState *env)
1588 {
1588 - CPUState *other_cs = first_cpu;
1589 MIPSCPU *cpu = env_archcpu(env);
1590 target_ulong prev = cpu->mvp->CP0_MVPControl;
1591
1592 if (env->CP0_VPEConf0 & (1 << CP0VPEC0_MVP)) {
1593 - CPU_FOREACH(other_cs) {
1594 - MIPSCPU *other_cpu = MIPS_CPU(other_cs);
1593 + CPUState *cs = first_cpu;
1594 +
1595 + CPU_FOREACH(cs) {
1596 + MIPSCPU *other_cpu = MIPS_CPU(cs);
1597
1598 if (&other_cpu->env != env
1599 /* If the VPE is WFI, don't disturb its sleep. */
@@ -1608,12 +1610,13 @@ target_ulong helper_evpe(CPUMIPSState *env)
1610 /* R6 Multi-threading */
1611 target_ulong helper_dvp(CPUMIPSState *env)
1612 {
1611 - CPUState *other_cs = first_cpu;
1613 target_ulong prev = env->CP0_VPControl;
1614
1615 if (!((env->CP0_VPControl >> CP0VPCtl_DIS) & 1)) {
1615 - CPU_FOREACH(other_cs) {
1616 - MIPSCPU *other_cpu = MIPS_CPU(other_cs);
1616 + CPUState *cpu = first_cpu;
1617 +
1618 + CPU_FOREACH(cpu) {
1619 + MIPSCPU *other_cpu = MIPS_CPU(cpu);
1620 /* Turn off all VPs except the one executing the dvp. */
1621 if (&other_cpu->env != env) {
1622 mips_vpe_sleep(other_cpu);
@@ -1626,12 +1629,13 @@ target_ulong helper_dvp(CPUMIPSState *env)
1629
1630 target_ulong helper_evp(CPUMIPSState *env)
1631 {
1629 - CPUState *other_cs = first_cpu;
1632 target_ulong prev = env->CP0_VPControl;
1633
1634 if ((env->CP0_VPControl >> CP0VPCtl_DIS) & 1) {
1633 - CPU_FOREACH(other_cs) {
1634 - MIPSCPU *other_cpu = MIPS_CPU(other_cs);
1635 + CPUState *cpu = first_cpu;
1636 +
1637 + CPU_FOREACH(cpu) {
1638 + MIPSCPU *other_cpu = MIPS_CPU(cpu);
1639 if ((&other_cpu->env != env) && !mips_vp_is_wfi(other_cpu)) {
1640 /*
1641 * If the VP is WFI, don't disturb its sleep.
target/mips/tcg/system/tlb_helper.c
+3 -4
@@ -346,15 +346,14 @@ void helper_ginvt(CPUMIPSState *env, target_ulong arg, uint32_t type)
346 uint32_t invMsgVPN2 = arg & (TARGET_PAGE_MASK << 1);
347 uint8_t invMsgR = 0;
348 uint32_t invMsgMMid = env->CP0_MemoryMapID;
349 - CPUState *other_cs = first_cpu;
349 + CPUState *cpu = first_cpu;
350
351 #ifdef TARGET_MIPS64
352 invMsgR = extract64(arg, 62, 2);
353 #endif
354
355 - CPU_FOREACH(other_cs) {
356 - MIPSCPU *other_cpu = MIPS_CPU(other_cs);
357 - global_invalidate_tlb(&other_cpu->env, invMsgVPN2, invMsgR, invMsgMMid,
355 + CPU_FOREACH(cpu) {
356 + global_invalidate_tlb(cpu_env(cpu), invMsgVPN2, invMsgR, invMsgMMid,
357 invAll, invVAMMid, invMMid, invVA);
358 }
359 }