From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Richard Henderson <richard.henderson@linaro.org>,
Erich-McMillan <erich.mcmillan@hp.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: [PULL 56/66] hw/i386/pc: add max combined fw size as machine configuration option
Date: Tue, 8 Dec 2020 14:37:08 -0500 [thread overview]
Message-ID: <20201208193307.646726-57-mst@redhat.com> (raw)
In-Reply-To: <20201208193307.646726-1-mst@redhat.com>
From: Erich-McMillan <erich.mcmillan@hp.com>
At Hewlett Packard Inc. we have a need for increased fw size to enable testing of our custom fw.
Rebase v6 patch to d73c46e4
Signed-off-by: Erich McMillan <erich.mcmillan@hp.com>
Message-Id: <20201208155338.14-1-erich.mcmillan@hp.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/hw/i386/pc.h | 2 ++
hw/i386/pc.c | 51 ++++++++++++++++++++++++++++++++++++++++++++
hw/i386/pc_sysfw.c | 15 +++----------
3 files changed, 56 insertions(+), 12 deletions(-)
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 49dfa667de..2aa8797c6e 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -44,6 +44,7 @@ typedef struct PCMachineState {
bool sata_enabled;
bool pit_enabled;
bool hpet_enabled;
+ uint64_t max_fw_size;
/* NUMA information: */
uint64_t numa_nodes;
@@ -60,6 +61,7 @@ typedef struct PCMachineState {
#define PC_MACHINE_SMBUS "smbus"
#define PC_MACHINE_SATA "sata"
#define PC_MACHINE_PIT "pit"
+#define PC_MACHINE_MAX_FW_SIZE "max-fw-size"
/**
* PCMachineClass:
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 7113fb0770..675e15c0aa 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1569,6 +1569,50 @@ static void pc_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
pcms->max_ram_below_4g = value;
}
+static void pc_machine_get_max_fw_size(Object *obj, Visitor *v,
+ const char *name, void *opaque,
+ Error **errp)
+{
+ PCMachineState *pcms = PC_MACHINE(obj);
+ uint64_t value = pcms->max_fw_size;
+
+ visit_type_size(v, name, &value, errp);
+}
+
+static void pc_machine_set_max_fw_size(Object *obj, Visitor *v,
+ const char *name, void *opaque,
+ Error **errp)
+{
+ PCMachineState *pcms = PC_MACHINE(obj);
+ Error *error = NULL;
+ uint64_t value;
+
+ visit_type_size(v, name, &value, &error);
+ if (error) {
+ error_propagate(errp, error);
+ return;
+ }
+
+ /*
+ * We don't have a theoretically justifiable exact lower bound on the base
+ * address of any flash mapping. In practice, the IO-APIC MMIO range is
+ * [0xFEE00000..0xFEE01000] -- see IO_APIC_DEFAULT_ADDRESS --, leaving free
+ * only 18MB-4KB below 4G. For now, restrict the cumulative mapping to 8MB in
+ * size.
+ */
+ if (value > 16 * MiB) {
+ error_setg(errp,
+ "User specified max allowed firmware size %" PRIu64 " is "
+ "greater than 16MiB. If combined firwmare size exceeds "
+ "16MiB the system may not boot, or experience intermittent"
+ "stability issues.",
+ value);
+ return;
+ }
+
+ pcms->max_fw_size = value;
+}
+
static void pc_machine_initfn(Object *obj)
{
PCMachineState *pcms = PC_MACHINE(obj);
@@ -1584,6 +1628,7 @@ static void pc_machine_initfn(Object *obj)
pcms->smbus_enabled = true;
pcms->sata_enabled = true;
pcms->pit_enabled = true;
+ pcms->max_fw_size = 8 * MiB;
#ifdef CONFIG_HPET
pcms->hpet_enabled = true;
#endif
@@ -1710,6 +1755,12 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
object_class_property_add_bool(oc, "hpet",
pc_machine_get_hpet, pc_machine_set_hpet);
+
+ object_class_property_add(oc, PC_MACHINE_MAX_FW_SIZE, "size",
+ pc_machine_get_max_fw_size, pc_machine_set_max_fw_size,
+ NULL, NULL);
+ object_class_property_set_description(oc, PC_MACHINE_MAX_FW_SIZE,
+ "Maximum combined firmware size");
}
static const TypeInfo pc_machine_info = {
diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
index b6c0822fe3..f8bd3a8b85 100644
--- a/hw/i386/pc_sysfw.c
+++ b/hw/i386/pc_sysfw.c
@@ -39,15 +39,6 @@
#include "hw/block/flash.h"
#include "sysemu/kvm.h"
-/*
- * We don't have a theoretically justifiable exact lower bound on the base
- * address of any flash mapping. In practice, the IO-APIC MMIO range is
- * [0xFEE00000..0xFEE01000] -- see IO_APIC_DEFAULT_ADDRESS --, leaving free
- * only 18MB-4KB below 4G. For now, restrict the cumulative mapping to 8MB in
- * size.
- */
-#define FLASH_SIZE_LIMIT (8 * MiB)
-
#define FLASH_SECTOR_SIZE 4096
static void pc_isa_bios_init(MemoryRegion *rom_memory,
@@ -140,7 +131,7 @@ void pc_system_flash_cleanup_unused(PCMachineState *pcms)
* Stop at the first pcms->flash[0] lacking a block backend.
* Set each flash's size from its block backend. Fatal error if the
* size isn't a non-zero multiple of 4KiB, or the total size exceeds
- * FLASH_SIZE_LIMIT.
+ * pcms->max_fw_size.
*
* If pcms->flash[0] has a block backend, its memory is passed to
* pc_isa_bios_init(). Merging several flash devices for isa-bios is
@@ -182,10 +173,10 @@ static void pc_system_flash_map(PCMachineState *pcms,
}
if ((hwaddr)size != size
|| total_size > HWADDR_MAX - size
- || total_size + size > FLASH_SIZE_LIMIT) {
+ || total_size + size > pcms->max_fw_size) {
error_report("combined size of system firmware exceeds "
"%" PRIu64 " bytes",
- FLASH_SIZE_LIMIT);
+ pcms->max_fw_size);
exit(1);
}
--
MST
next prev parent reply other threads:[~2020-12-08 20:18 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-08 19:33 [PULL 00/66] pc,pci,virtio: fixes, cleanups Michael S. Tsirkin
2020-12-08 19:33 ` [PULL 01/66] vhost-user-scsi: Fix memleaks in vus_proc_req() Michael S. Tsirkin
2020-12-08 19:33 ` [PULL 02/66] memory: Rename memory_region_notify_one to memory_region_notify_iommu_one Michael S. Tsirkin
2020-12-08 19:33 ` Michael S. Tsirkin
2020-12-08 19:33 ` [PULL 03/66] memory: Add IOMMUTLBEvent Michael S. Tsirkin
2020-12-08 19:33 ` [PULL 04/66] memory: Add IOMMU_NOTIFIER_DEVIOTLB_UNMAP IOMMUTLBNotificationType Michael S. Tsirkin
2020-12-08 19:33 ` [PULL 05/66] intel_iommu: Skip page walking on device iotlb invalidations Michael S. Tsirkin
2020-12-08 19:33 ` [PULL 06/66] memory: Skip bad range assertion if notifier is DEVIOTLB_UNMAP type Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 07/66] virtio: reset device on bad guest index in virtio_load() Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 08/66] acpi/gpex: Extract two APIs from acpi_dsdt_add_pci Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 09/66] fw_cfg: Refactor extra pci roots addition Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 10/66] hw/arm/virt: Write extra pci roots into fw_cfg Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 11/66] acpi: Extract crs build form acpi_build.c Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 12/66] acpi/gpex: Build tables for pxb Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 13/66] acpi: Align the size to 128k Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 14/66] unit-test: The files changed Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 15/66] unit-test: Add testcase for pxb Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 16/66] unit-test: Add the binary file and clear diff.h Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 17/66] failover: fix indentantion Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 18/66] failover: Use always atomics for primary_should_be_hidden Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 19/66] failover: primary bus is only used once, and where it is set Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 20/66] failover: Remove unused parameter Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 21/66] failover: Remove external partially_hotplugged property Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 22/66] failover: qdev_device_add() returns err or dev set Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 23/66] failover: Rename bool to failover_primary_hidden Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 24/66] failover: g_strcmp0() knows how to handle NULL Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 25/66] failover: Remove primary_device_opts Michael S. Tsirkin
2020-12-08 19:34 ` [PULL 26/66] failover: remove standby_id variable Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 27/66] failover: Remove primary_device_dict Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 28/66] failover: Remove memory leak Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 29/66] failover: simplify virtio_net_find_primary() Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 30/66] failover: should_be_hidden() should take a bool Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 31/66] failover: Rename function to hide_device() Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 32/66] failover: virtio_net_connect_failover_devices() does nothing Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 33/66] failover: Rename to failover_find_primary_device() Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 34/66] failover: simplify qdev_device_add() failover case Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 35/66] failover: simplify qdev_device_add() Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 36/66] failover: make sure that id always exist Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 37/66] failover: remove failover_find_primary_device() error parameter Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 38/66] failover: split failover_find_primary_device_id() Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 39/66] failover: We don't need to cache primary_device_id anymore Michael S. Tsirkin
2020-12-08 19:35 ` [PULL 40/66] failover: Caller of this two functions already have primary_dev Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 41/66] failover: simplify failover_unplug_primary Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 42/66] failover: Remove primary_dev member Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 43/66] hw: add compat machines for 6.0 Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 44/66] libvhost-user: replace qemu/bswap.h with glibc endian.h Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 45/66] libvhost-user: replace qemu/memfd.h usage Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 46/66] libvhost-user: remove qemu/compiler.h usage Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 47/66] libvhost-user: drop qemu/osdep.h dependency Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 48/66] libvhost-user: make it a meson subproject Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 49/66] libvhost-user: check memfd API Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 50/66] libvhost-user: add a simple link test without glib Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 51/66] .gitlab-ci: add build-libvhost-user Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 52/66] contrib/vhost-user-blk: avoid g_return_val_if() input validation Michael S. Tsirkin
2020-12-08 19:36 ` [PULL 53/66] contrib/vhost-user-gpu: " Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 54/66] contrib/vhost-user-input: " Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 55/66] block/export: " Michael S. Tsirkin
2020-12-08 19:37 ` Michael S. Tsirkin [this message]
2020-12-08 19:37 ` [PULL 57/66] acpi: cpuhp: introduce 'firmware performs eject' status/control bits Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 58/66] x86: acpi: introduce AcpiPmInfo::smi_on_cpu_unplug Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 59/66] tests/acpi: allow expected files change Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 60/66] x86: acpi: let the firmware handle pending "CPU remove" events in SMM Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 61/66] tests/acpi: update expected files Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 62/66] x86: ich9: factor out "guest_cpu_hotplug_features" Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 63/66] x86: ich9: let firmware negotiate 'CPU hot-unplug with SMI' feature Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 64/66] pcie_aer: Fix help message of pcie_aer_inject_error command Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 65/66] hw/virtio-pci Added counter for pcie capabilities offsets Michael S. Tsirkin
2020-12-08 19:37 ` [PULL 66/66] hw/virtio-pci Added AER capability Michael S. Tsirkin
2020-12-08 19:53 ` [PULL 00/66] pc,pci,virtio: fixes, cleanups Philippe Mathieu-Daudé
2020-12-08 20:26 ` Michael S. Tsirkin
2020-12-09 14:37 ` Peter Maydell
2020-12-09 16:20 ` Peter Maydell
2020-12-09 18:05 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201208193307.646726-57-mst@redhat.com \
--to=mst@redhat.com \
--cc=ehabkost@redhat.com \
--cc=erich.mcmillan@hp.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.