From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>, qemu-devel@nongnu.org
Cc: Eduardo Habkost <ehabkost@redhat.com>,
Sergio Lopez <slp@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
imammedo@redhat.com, Richard Henderson <rth@twiddle.net>
Subject: Re: [PATCH 3/3] x86: move max-ram-below-4g to pc
Date: Mon, 25 May 2020 15:46:47 +0200 [thread overview]
Message-ID: <f3766c20-3bb3-4431-8781-5dea4eace5c8@redhat.com> (raw)
In-Reply-To: <20200525134101.24740-4-kraxel@redhat.com>
On 5/25/20 3:41 PM, Gerd Hoffmann wrote:
> Move from X86MachineClass to PCMachineClass so it disappears
> from microvm machine type property list.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/hw/i386/pc.h | 2 ++
> include/hw/i386/x86.h | 4 ----
> hw/i386/pc.c | 46 +++++++++++++++++++++++++++++++++++++++++++
> hw/i386/pc_piix.c | 10 +++++-----
> hw/i386/pc_q35.c | 10 +++++-----
> hw/i386/x86.c | 46 -------------------------------------------
> 6 files changed, 58 insertions(+), 60 deletions(-)
>
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 8d764f965cd3..e6135c34d656 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -35,6 +35,7 @@ struct PCMachineState {
> PFlashCFI01 *flash[2];
>
> /* Configuration options: */
> + uint64_t max_ram_below_4g;
> OnOffAuto vmport;
>
> bool acpi_build_enabled;
> @@ -51,6 +52,7 @@ struct PCMachineState {
> };
>
> #define PC_MACHINE_ACPI_DEVICE_PROP "acpi-device"
> +#define PC_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
> #define PC_MACHINE_DEVMEM_REGION_SIZE "device-memory-region-size"
> #define PC_MACHINE_VMPORT "vmport"
> #define PC_MACHINE_SMBUS "smbus"
> diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
> index b52285481687..b79f24e28545 100644
> --- a/include/hw/i386/x86.h
> +++ b/include/hw/i386/x86.h
> @@ -51,9 +51,6 @@ typedef struct {
> qemu_irq *gsi;
> GMappedFile *initrd_mapped_file;
>
> - /* Configuration options: */
> - uint64_t max_ram_below_4g;
> -
> /* RAM information (sizes, addresses, configuration): */
> ram_addr_t below_4g_mem_size, above_4g_mem_size;
>
> @@ -82,7 +79,6 @@ typedef struct {
> AddressSpace *ioapic_as;
> } X86MachineState;
>
> -#define X86_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
> #define X86_MACHINE_SMM "smm"
> #define X86_MACHINE_ACPI "acpi"
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 2128f3d6fe8b..80a6cac3b56f 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1856,6 +1856,45 @@ static void pc_machine_set_pit(Object *obj, bool value, Error **errp)
> pcms->pit_enabled = value;
> }
>
> +static void pc_machine_get_max_ram_below_4g(Object *obj, Visitor *v,
> + const char *name, void *opaque,
> + Error **errp)
> +{
> + PCMachineState *pcms = PC_MACHINE(obj);
> + uint64_t value = pcms->max_ram_below_4g;
> +
> + visit_type_size(v, name, &value, errp);
> +}
> +
> +static void pc_machine_set_max_ram_below_4g(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;
> + }
> + if (value > 4 * GiB) {
> + error_setg(&error,
> + "Machine option 'max-ram-below-4g=%"PRIu64
> + "' expects size less than or equal to 4G", value);
> + error_propagate(errp, error);
> + return;
> + }
> +
> + if (value < 1 * MiB) {
> + 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;
> +}
> +
> static void pc_machine_initfn(Object *obj)
> {
> PCMachineState *pcms = PC_MACHINE(obj);
> @@ -1865,6 +1904,7 @@ static void pc_machine_initfn(Object *obj)
> #else
> pcms->vmport = ON_OFF_AUTO_OFF;
> #endif /* CONFIG_VMPORT */
> + pcms->max_ram_below_4g = 0; /* use default */
> /* acpi build is enabled by default if machine supports it */
> pcms->acpi_build_enabled = PC_MACHINE_GET_CLASS(pcms)->has_acpi_build;
> pcms->smbus_enabled = true;
> @@ -1963,6 +2003,12 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
> mc->numa_mem_supported = true;
> mc->default_ram_id = "pc.ram";
>
> + object_class_property_add(oc, PC_MACHINE_MAX_RAM_BELOW_4G, "size",
> + pc_machine_get_max_ram_below_4g, pc_machine_set_max_ram_below_4g,
> + NULL, NULL);
> + object_class_property_set_description(oc, PC_MACHINE_MAX_RAM_BELOW_4G,
> + "Maximum ram below the 4G boundary (32bit boundary)");
> +
> object_class_property_add(oc, PC_MACHINE_DEVMEM_REGION_SIZE, "int",
> pc_machine_get_device_memory_region_size, NULL,
> NULL, NULL);
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index f66e1d73ce0b..503c35f7bf4c 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -127,11 +127,11 @@ static void pc_init1(MachineState *machine,
> if (xen_enabled()) {
> xen_hvm_init(pcms, &ram_memory);
> } else {
> - if (!x86ms->max_ram_below_4g) {
> - x86ms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */
> + if (!pcms->max_ram_below_4g) {
> + pcms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */
> }
> - lowmem = x86ms->max_ram_below_4g;
> - if (machine->ram_size >= x86ms->max_ram_below_4g) {
> + lowmem = pcms->max_ram_below_4g;
> + if (machine->ram_size >= pcms->max_ram_below_4g) {
> if (pcmc->gigabyte_align) {
> if (lowmem > 0xc0000000) {
> lowmem = 0xc0000000;
> @@ -140,7 +140,7 @@ static void pc_init1(MachineState *machine,
> warn_report("Large machine and max_ram_below_4g "
> "(%" PRIu64 ") not a multiple of 1G; "
> "possible bad performance.",
> - x86ms->max_ram_below_4g);
> + pcms->max_ram_below_4g);
> }
> }
> }
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 4ba8ac8774e4..90e8fb2cb737 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -154,18 +154,18 @@ static void pc_q35_init(MachineState *machine)
> /* Handle the machine opt max-ram-below-4g. It is basically doing
> * min(qemu limit, user limit).
> */
> - if (!x86ms->max_ram_below_4g) {
> - x86ms->max_ram_below_4g = 4 * GiB;
> + if (!pcms->max_ram_below_4g) {
> + pcms->max_ram_below_4g = 4 * GiB;
> }
> - if (lowmem > x86ms->max_ram_below_4g) {
> - lowmem = x86ms->max_ram_below_4g;
> + if (lowmem > pcms->max_ram_below_4g) {
> + lowmem = pcms->max_ram_below_4g;
> if (machine->ram_size - lowmem > lowmem &&
> lowmem & (1 * GiB - 1)) {
> 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.",
> - (uint64_t)machine->ram_size, x86ms->max_ram_below_4g);
> + (uint64_t)machine->ram_size, pcms->max_ram_below_4g);
> }
> }
>
> diff --git a/hw/i386/x86.c b/hw/i386/x86.c
> index 7a3bc7ab6639..49884e5c1597 100644
> --- a/hw/i386/x86.c
> +++ b/hw/i386/x86.c
> @@ -846,45 +846,6 @@ void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw)
> bios);
> }
>
> -static void x86_machine_get_max_ram_below_4g(Object *obj, Visitor *v,
> - const char *name, void *opaque,
> - Error **errp)
> -{
> - X86MachineState *x86ms = X86_MACHINE(obj);
> - uint64_t value = x86ms->max_ram_below_4g;
> -
> - visit_type_size(v, name, &value, errp);
> -}
> -
> -static void x86_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
> - const char *name, void *opaque,
> - Error **errp)
> -{
> - X86MachineState *x86ms = X86_MACHINE(obj);
> - Error *error = NULL;
> - uint64_t value;
> -
> - visit_type_size(v, name, &value, &error);
> - if (error) {
> - error_propagate(errp, error);
> - return;
> - }
> - if (value > 4 * GiB) {
> - error_setg(&error,
> - "Machine option 'max-ram-below-4g=%"PRIu64
> - "' expects size less than or equal to 4G", value);
> - error_propagate(errp, error);
> - return;
> - }
> -
> - if (value < 1 * MiB) {
> - warn_report("Only %" PRIu64 " bytes of RAM below the 4GiB boundary,"
> - "BIOS may not work with less than 1MiB", value);
> - }
> -
> - x86ms->max_ram_below_4g = value;
> -}
> -
> bool x86_machine_is_smm_enabled(X86MachineState *x86ms)
> {
> bool smm_available = false;
> @@ -958,7 +919,6 @@ static void x86_machine_initfn(Object *obj)
>
> x86ms->smm = ON_OFF_AUTO_AUTO;
> x86ms->acpi = ON_OFF_AUTO_AUTO;
> - x86ms->max_ram_below_4g = 0; /* use default */
> x86ms->smp_dies = 1;
>
> x86ms->apicid_from_cpu_idx = x86_apicid_from_cpu_idx;
> @@ -980,12 +940,6 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
> x86mc->save_tsc_khz = true;
> nc->nmi_monitor_handler = x86_nmi;
>
> - object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
> - x86_machine_get_max_ram_below_4g, x86_machine_set_max_ram_below_4g,
> - NULL, NULL);
> - object_class_property_set_description(oc, X86_MACHINE_MAX_RAM_BELOW_4G,
> - "Maximum ram below the 4G boundary (32bit boundary)");
> -
> object_class_property_add(oc, X86_MACHINE_SMM, "OnOffAuto",
> x86_machine_get_smm, x86_machine_set_smm,
> NULL, NULL);
>
Good!
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
next prev parent reply other threads:[~2020-05-25 13:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-25 13:40 [PATCH 0/3] microvm: memory config tweaks Gerd Hoffmann
2020-05-25 13:40 ` [PATCH 1/3] microvm: use 2G split unconditionally Gerd Hoffmann
2020-05-25 13:41 ` [PATCH 2/3] microvm: drop max-ram-below-4g support Gerd Hoffmann
2020-05-25 16:44 ` Igor Mammedov
2020-05-25 13:41 ` [PATCH 3/3] x86: move max-ram-below-4g to pc Gerd Hoffmann
2020-05-25 13:46 ` Philippe Mathieu-Daudé [this message]
2020-05-25 13:56 ` [PATCH 0/3] microvm: memory config tweaks Paolo Bonzini
2020-05-26 1:47 ` no-reply
2020-05-26 1:52 ` no-reply
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=f3766c20-3bb3-4431-8781-5dea4eace5c8@redhat.com \
--to=philmd@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=kraxel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=slp@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).