Commit 6c65c9f1f3 for qemu.org

commit 6c65c9f1f318c4087c0b92512181fa17eeef51b0
Author: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Date:   Mon Sep 21 12:35:14 2026 +0100

    hw/i386/pc_sysfw.c: convert pflash0 and pflash1 object props to class props

    Now that the pflash0 and pflash1 machine properties are class properties, if
    they are unspecified then QOM returns an empty string as opposed to returning
    a property not found error.

    Before this patch:

    $ ./build/qemu-system-x86_64 -M q35 -monitor stdio
    QEMU 11.1.50 monitor - type 'help' for more information
    (qemu) qom-get /machine pflash0
    Error: Property 'pc-q35-11.1-machine.pflash0' not found

    After this patch:

    $ ./build/qemu-system-x86_64 -M q35 -monitor stdio
    QEMU 11.1.50 monitor - type 'help' for more information
    (qemu) qom-get /machine pflash0
    ""

    Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
    Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
    Message-ID: <20260921113559.1299740-9-mark.caveayland@nutanix.com>

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 37d199f2dc..b649f184de 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1800,6 +1800,14 @@ static void pc_machine_class_init(ObjectClass *oc, const void *data)
                                    offsetof(X86MachineState, acpi_dev),
                                    object_property_allow_set_link,
                                    OBJ_PROP_LINK_STRONG);
+    object_class_property_add_alias(oc, "pflash0",
+                                    offsetof(PCMachineState, alias_pflash0),
+                                    TYPE_PFLASH_CFI01,
+                                    "drive");
+    object_class_property_add_alias(oc, "pflash1",
+                                    offsetof(PCMachineState, alias_pflash1),
+                                    TYPE_PFLASH_CFI01,
+                                    "drive");
 }

 static const TypeInfo pc_machine_info = {
diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
index 1a41a5972b..441e777191 100644
--- a/hw/i386/pc_sysfw.c
+++ b/hw/i386/pc_sysfw.c
@@ -85,8 +85,7 @@ static PFlashCFI01 *pc_pflash_create(PCMachineState *pcms,
     qdev_prop_set_uint8(dev, "width", 1);
     qdev_prop_set_string(dev, "name", name);
     object_property_add_child(OBJECT(pcms), name, OBJECT(dev));
-    object_property_add_alias(OBJECT(pcms), alias_prop_name,
-                              OBJECT(dev), "drive");
+    object_property_set_alias(OBJECT(pcms), alias_prop_name, OBJECT(dev));
     /*
      * The returned reference is tied to the child property and
      * will be removed with object_unparent.
@@ -109,16 +108,12 @@ void pc_system_flash_create(PCMachineState *pcms)

 void pc_system_flash_cleanup_unused(PCMachineState *pcms)
 {
-    char *prop_name;
     int i;

     assert(PC_MACHINE_GET_CLASS(pcms)->pci_enabled);

     for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) {
         if (!qdev_is_realized(DEVICE(pcms->flash[i]))) {
-            prop_name = g_strdup_printf("pflash%d", i);
-            object_property_del(OBJECT(pcms), prop_name);
-            g_free(prop_name);
             object_unparent(OBJECT(pcms->flash[i]));
             pcms->flash[i] = NULL;
         }
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index cbe88a1788..8edec62a1a 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -40,6 +40,8 @@ typedef struct PCMachineState {

     Object *alias_pcspk;
     Object *alias_rtc_time;
+    Object *alias_pflash0;
+    Object *alias_pflash1;

     /* Configuration options: */
     uint64_t max_ram_below_4g;