From nobody Wed Nov 5 07:36:25 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1533904900391732.1724048530253; Fri, 10 Aug 2018 05:41:40 -0700 (PDT) Received: from localhost ([::1]:56035 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fo6ja-0007Zl-Me for importer@patchew.org; Fri, 10 Aug 2018 08:41:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43345) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fo6ij-0007E4-GC for qemu-devel@nongnu.org; Fri, 10 Aug 2018 08:40:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fo6ig-00039y-B6 for qemu-devel@nongnu.org; Fri, 10 Aug 2018 08:40:45 -0400 Received: from chuckie.co.uk ([82.165.15.123]:45566 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fo6ig-00039G-2r; Fri, 10 Aug 2018 08:40:42 -0400 Received: from host86-189-155-101.range86-189.btcentralplus.com ([86.189.155.101] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1fo6in-0001Uu-VG; Fri, 10 Aug 2018 13:40:51 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, ehabkost@redhat.com, lersek@redhat.com, marcel.apfelbaum@gmail.com, arei.gonglei@huawei.com, david@gibson.dropbear.id.au Date: Fri, 10 Aug 2018 13:40:27 +0100 Message-Id: <20180810124027.10698-1-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 X-SA-Exim-Connect-IP: 86.189.155.101 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH] fw_cfg: ignore suffixes in the bootdevice list dependent on machine class X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 hav= e a separate disk node or require different (custom) names then it is much easi= er 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 Signed-off-by: Mark Cave-Ayland Acked-by: David Gibson Reviewed-by: Laszlo Ersek --- bootdevice.c | 5 ++++- hw/nvram/fw_cfg.c | 2 +- hw/ppc/spapr.c | 3 ++- include/hw/boards.h | 1 + include/sysemu/sysemu.h | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bootdevice.c b/bootdevice.c index 1141009114..1d225202f9 100644 --- a/bootdevice.c +++ b/bootdevice.c @@ -29,6 +29,7 @@ #include "qemu/error-report.h" #include "sysemu/reset.h" #include "hw/qdev-core.h" +#include "hw/boards.h" =20 typedef struct FWBootEntry FWBootEntry; =20 @@ -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 =3D 0; char *list =3D NULL; + MachineClass *mc =3D MACHINE_GET_CLASS(qdev_get_machine()); + bool ignore_suffixes =3D mc->ignore_boot_device_suffixes; =20 QTAILQ_FOREACH(i, &fw_boot_order, link) { char *devpath =3D NULL, *suffix =3D NULL; diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index b23e7f64a8..d79a568f54 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -861,7 +861,7 @@ static void fw_cfg_machine_reset(void *opaque) void *ptr; size_t len; FWCfgState *s =3D opaque; - char *bootindex =3D get_boot_devices_list(&len, false); + char *bootindex =3D get_boot_devices_list(&len); =20 ptr =3D fw_cfg_modify_file(s, "bootorder", (uint8_t *)bootindex, len); g_free(ptr); diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 421b2dd09b..e5d825374e 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1160,7 +1160,7 @@ static void spapr_dt_chosen(sPAPRMachineState *spapr,= void *fdt) const char *boot_device =3D machine->boot_order; char *stdout_path =3D spapr_vio_stdout_path(spapr->vio_bus); size_t cb =3D 0; - char *bootlist =3D get_boot_devices_list(&cb, true); + char *bootlist =3D get_boot_devices_list(&cb); =20 _FDT(chosen =3D fdt_add_subnode(fdt, 0, "chosen")); =20 @@ -3949,6 +3949,7 @@ static void spapr_machine_class_init(ObjectClass *oc,= void *data) InterruptStatsProviderClass *ispc =3D INTERRUPT_STATS_PROVIDER_CLASS(o= c); =20 mc->desc =3D "pSeries Logical Partition (PAPR compliant)"; + mc->ignore_boot_device_suffixes =3D true; =20 /* * We set up the default / latest behaviour here. The class_init diff --git a/include/hw/boards.h b/include/hw/boards.h index d139a431a6..f82f28468b 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -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; =20 HotplugHandler *(*get_hotplug_handler)(MachineState *machine, DeviceState *dev); diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 76ef6196a7..8d6095d98b 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -182,7 +182,7 @@ void hmp_info_usb(Monitor *mon, const QDict *qdict); =20 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); =20 DeviceState *get_boot_device(uint32_t position); void check_boot_index(int32_t bootindex, Error **errp); --=20 2.11.0