]> Git Repo - qemu.git/commitdiff
fw_cfg: ignore suffixes in the bootdevice list dependent on machine class
authorMark Cave-Ayland <[email protected]>
Fri, 10 Aug 2018 12:40:27 +0000 (13:40 +0100)
committerEduardo Habkost <[email protected]>
Fri, 17 Aug 2018 01:27:43 +0000 (22:27 -0300)
For the older machines (such as Mac and SPARC) the DT nodes representing
bootdevices for disk nodes are irregular for mainly historical reasons.

Since the majority of bootdevice nodes for these machines either do not have a
separate disk node or require different (custom) names then it is much easier
for processing to just disable all suffixes for a particular machine.

Introduce a new ignore_boot_device_suffixes MachineClass property to control
bootdevice suffix generation, defaulting to false in order to preserve
compatibility.

Suggested-by: Eduardo Habkost <[email protected]>
Signed-off-by: Mark Cave-Ayland <[email protected]>
Message-Id: <20180810124027[email protected]>
Reviewed-by: Laszlo Ersek <[email protected]>
Acked-by: David Gibson <[email protected]>
Signed-off-by: Eduardo Habkost <[email protected]>
bootdevice.c
hw/nvram/fw_cfg.c
hw/ppc/spapr.c
include/hw/boards.h
include/sysemu/sysemu.h

index 114100911492c6fa15a64ab206d1de3eb885fcdc..1d225202f9726e536d3466a28a6eaa5a8304a41b 100644 (file)
@@ -29,6 +29,7 @@
 #include "qemu/error-report.h"
 #include "sysemu/reset.h"
 #include "hw/qdev-core.h"
+#include "hw/boards.h"
 
 typedef struct FWBootEntry FWBootEntry;
 
@@ -208,11 +209,13 @@ DeviceState *get_boot_device(uint32_t position)
  * memory pointed by "size" is assigned total length of the array in bytes
  *
  */
-char *get_boot_devices_list(size_t *size, bool ignore_suffixes)
+char *get_boot_devices_list(size_t *size)
 {
     FWBootEntry *i;
     size_t total = 0;
     char *list = NULL;
+    MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
+    bool ignore_suffixes = mc->ignore_boot_device_suffixes;
 
     QTAILQ_FOREACH(i, &fw_boot_order, link) {
         char *devpath = NULL,  *suffix = NULL;
index b23e7f64a873a046dea81cbe51e9eeeea43495d4..d79a568f540f73374a864aafc02e760dde748cd9 100644 (file)
@@ -861,7 +861,7 @@ static void fw_cfg_machine_reset(void *opaque)
     void *ptr;
     size_t len;
     FWCfgState *s = opaque;
-    char *bootindex = get_boot_devices_list(&len, false);
+    char *bootindex = get_boot_devices_list(&len);
 
     ptr = fw_cfg_modify_file(s, "bootorder", (uint8_t *)bootindex, len);
     g_free(ptr);
index 421b2dd09b515502cd11ccdd26420a8117f80cda..e5d825374e556f455e71b69916023c12f41221e7 100644 (file)
@@ -1160,7 +1160,7 @@ static void spapr_dt_chosen(sPAPRMachineState *spapr, void *fdt)
     const char *boot_device = machine->boot_order;
     char *stdout_path = spapr_vio_stdout_path(spapr->vio_bus);
     size_t cb = 0;
-    char *bootlist = get_boot_devices_list(&cb, true);
+    char *bootlist = get_boot_devices_list(&cb);
 
     _FDT(chosen = fdt_add_subnode(fdt, 0, "chosen"));
 
@@ -3949,6 +3949,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
     InterruptStatsProviderClass *ispc = INTERRUPT_STATS_PROVIDER_CLASS(oc);
 
     mc->desc = "pSeries Logical Partition (PAPR compliant)";
+    mc->ignore_boot_device_suffixes = true;
 
     /*
      * We set up the default / latest behaviour here.  The class_init
index d139a431a674ca6de22705b7e7ce476c6f11c6a3..f82f28468b045a81dbdd5188d7e5ff31d8155c19 100644 (file)
@@ -206,6 +206,7 @@ struct MachineClass {
     bool auto_enable_numa_with_memhp;
     void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes,
                                  int nb_nodes, ram_addr_t size);
+    bool ignore_boot_device_suffixes;
 
     HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
                                            DeviceState *dev);
index 76ef6196a72f0f62475011028100e96f54842a88..8d6095d98bb70e224296612f1d2d275d93332f77 100644 (file)
@@ -182,7 +182,7 @@ void hmp_info_usb(Monitor *mon, const QDict *qdict);
 
 void add_boot_device_path(int32_t bootindex, DeviceState *dev,
                           const char *suffix);
-char *get_boot_devices_list(size_t *size, bool ignore_suffixes);
+char *get_boot_devices_list(size_t *size);
 
 DeviceState *get_boot_device(uint32_t position);
 void check_boot_index(int32_t bootindex, Error **errp);
This page took 0.044677 seconds and 4 git commands to generate.