Commit 3800f80624 for qemu.org

commit 3800f80624747bc1a4e0ae7f488175c7f3d2ac57
Author: Philippe Mathieu-Daudé <philmd@linaro.org>
Date:   Tue Dec 16 18:44:43 2025 +0100

    hw/arm: Avoid address_space_stl_notdirty() when generating bootloader

    When using the '-kernel' command line option, a bootloader is
    emitted, calling address_space_stl_notdirty().

    The _notdirty() variant is supposed to /not/ mark the updated
    CODE page as dirty, to not re-translate it. However this code
    is only used with the '-kernel' CLI option after the machine
    is created and /before/ the vCPUs run, and *only* during the
    first (cold) reset; not during following (hot) resets. The
    optimisation is totally not justified, since we haven't
    translated any guest code yet.
    Replace by the normal address_space_stl() helper.

    Suggested-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Message-Id: <20251224151351.86733-4-philmd@linaro.org>

diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
index 6199d2d2d7..a3db3406c5 100644
--- a/hw/arm/aspeed.c
+++ b/hw/arm/aspeed.c
@@ -77,8 +77,8 @@ static void aspeed_reset_secondary(ARMCPU *cpu,
     CPUState *cs = CPU(cpu);

     /* info->smp_bootreg_addr */
-    address_space_stl_notdirty(as, AST_SMP_MBOX_FIELD_GOSIGN, 0,
-                               MEMTXATTRS_UNSPECIFIED, NULL);
+    address_space_stl(as, AST_SMP_MBOX_FIELD_GOSIGN, 0,
+                         MEMTXATTRS_UNSPECIFIED, NULL);
     cpu_set_pc(cs, info->smp_loader_start);
 }

diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index d87bcb5b88..0ba3adaf81 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -266,8 +266,8 @@ static void default_reset_secondary(ARMCPU *cpu,
     AddressSpace *as = arm_boot_address_space(cpu, info);
     CPUState *cs = CPU(cpu);

-    address_space_stl_notdirty(as, info->smp_bootreg_addr,
-                               0, MEMTXATTRS_UNSPECIFIED, NULL);
+    address_space_stl(as, info->smp_bootreg_addr,
+                         0, MEMTXATTRS_UNSPECIFIED, NULL);
     cpu_set_pc(cs, info->smp_loader_start);
 }

@@ -277,8 +277,8 @@ static inline bool have_dtb(const struct arm_boot_info *info)
 }

 #define WRITE_WORD(p, value) do { \
-    address_space_stl_notdirty(as, p, value, \
-                               MEMTXATTRS_UNSPECIFIED, NULL);  \
+    address_space_stl(as, p, value, \
+                         MEMTXATTRS_UNSPECIFIED, NULL);  \
     p += 4;                       \
 } while (0)