Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
---
V3:
- Improve the messages
hw/i386/acpi-build.c | 15 ++++++++++-----
hw/i386/pc.c | 7 +++----
hw/i386/pc_q35.c | 8 +++++---
3 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 98dd424678..142bd6433c 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -2780,17 +2780,22 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
ACPI_BUILD_ALIGN_SIZE);
if (tables_blob->len > legacy_table_size) {
/* Should happen only with PCI bridges and -M pc-i440fx-2.0. */
- warn_report("migration may not work.");
+ warn_report("ACPI table size %u exceeds %d bytes,"
+ " migration may not work",
+ tables_blob->len, legacy_table_size);
+ error_printf("Try removing CPUs, NUMA nodes, memory slots"
+ " or PCI bridges.");
}
g_array_set_size(tables_blob, legacy_table_size);
} else {
/* Make sure we have a buffer in case we need to resize the tables. */
if (tables_blob->len > ACPI_BUILD_TABLE_SIZE / 2) {
/* As of QEMU 2.1, this fires with 160 VCPUs and 255 memory slots. */
- warn_report("ACPI tables are larger than 64k.");
- warn_report("migration may not work.");
- warn_report("please remove CPUs, NUMA nodes, "
- "memory slots or PCI bridges.");
+ warn_report("ACPI table size %u exceeds %d bytes,"
+ " migration may not work",
+ tables_blob->len, ACPI_BUILD_TABLE_SIZE / 2);
+ error_printf("Try removing CPUs, NUMA nodes, memory slots"
+ " or PCI bridges.");
}
acpi_align_size(tables_blob, ACPI_BUILD_TABLE_SIZE);
}
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 21081041d5..c882f8c2ea 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -384,7 +384,7 @@ ISADevice *pc_find_fdc0(void)
warn_report("multiple floppy disk controllers with "
"iobase=0x3f0 have been found");
error_printf("the one being picked for CMOS setup might not reflect "
- "your intent\n");
+ "your intent");
}
return state.floppy;
@@ -2098,9 +2098,8 @@ static void pc_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
}
if (value < (1ULL << 20)) {
- warn_report("small max_ram_below_4g(%"PRIu64
- ") less than 1M. BIOS may not work..",
- value);
+ warn_report("Only %" PRIu64 " bytes of RAM below the 4GiB boundary,"
+ "BIOS may not work with less than 1MiB", value);
}
pcms->max_ram_below_4g = value;
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 169a214d50..435eb2c458 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -101,9 +101,11 @@ static void pc_q35_init(MachineState *machine)
lowmem = pcms->max_ram_below_4g;
if (machine->ram_size - lowmem > lowmem &&
lowmem & ((1ULL << 30) - 1)) {
- warn_report("Large machine and max_ram_below_4g(%"PRIu64
- ") not a multiple of 1G; possible bad performance.",
- pcms->max_ram_below_4g);
+ warn_report("Large machine as the ram size (0x%" PRIx64 ") is more"
+ " then twice the size of the internal limit"
+ " (0x%" PRIx64 ") and max-ram-below-4g (%"PRIu64")"
+ " note a multiple of 1G; possible bad performance.",
+ machine->ram_size, lowmem, pcms->max_ram_below_4g);
}
}
--
2.11.0
On Fri, Sep 01, 2017 at 09:51:05AM -0700, Alistair Francis wrote:
[...]
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 169a214d50..435eb2c458 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -101,9 +101,11 @@ static void pc_q35_init(MachineState *machine)
> lowmem = pcms->max_ram_below_4g;
> if (machine->ram_size - lowmem > lowmem &&
> lowmem & ((1ULL << 30) - 1)) {
> - warn_report("Large machine and max_ram_below_4g(%"PRIu64
> - ") not a multiple of 1G; possible bad performance.",
> - pcms->max_ram_below_4g);
> + warn_report("Large machine as the ram size (0x%" PRIx64 ") is more"
> + " then twice the size of the internal limit"
> + " (0x%" PRIx64 ") and max-ram-below-4g (%"PRIu64")"
> + " note a multiple of 1G; possible bad performance.",
> + machine->ram_size, lowmem, pcms->max_ram_below_4g);
Here lowmem and max_ram_below_4g have exactly the same value,
don't they? There's no internal limit involved in this logic,
only max_ram_below_4g and ram_size.
--
Eduardo
On Mon, Sep 4, 2017 at 7:17 AM, Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Fri, Sep 01, 2017 at 09:51:05AM -0700, Alistair Francis wrote:
> [...]
>> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
>> index 169a214d50..435eb2c458 100644
>> --- a/hw/i386/pc_q35.c
>> +++ b/hw/i386/pc_q35.c
>> @@ -101,9 +101,11 @@ static void pc_q35_init(MachineState *machine)
>> lowmem = pcms->max_ram_below_4g;
>> if (machine->ram_size - lowmem > lowmem &&
>> lowmem & ((1ULL << 30) - 1)) {
>> - warn_report("Large machine and max_ram_below_4g(%"PRIu64
>> - ") not a multiple of 1G; possible bad performance.",
>> - pcms->max_ram_below_4g);
>> + warn_report("Large machine as the ram size (0x%" PRIx64 ") is more"
>> + " then twice the size of the internal limit"
>> + " (0x%" PRIx64 ") and max-ram-below-4g (%"PRIu64")"
>> + " note a multiple of 1G; possible bad performance.",
>> + machine->ram_size, lowmem, pcms->max_ram_below_4g);
>
> Here lowmem and max_ram_below_4g have exactly the same value,
> don't they? There's no internal limit involved in this logic,
> only max_ram_below_4g and ram_size.
Good point, I'll change it to this:
warn_report("There is possibly poor performance as the ram size "
" (0x%" PRIx64 ") is more then twice the size of"
" max-ram-below-4g (%"PRIu64") and"
" max-ram-below-4g is not a multiple of 1G.",
machine->ram_size, pcms->max_ram_below_4g);
Thanks,
Alistair
>
> --
> Eduardo
© 2016 - 2025 Red Hat, Inc.