All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com,
	richard.henderson@linaro.org, eduardo@habkost.net,
	marcel.apfelbaum@gmail.com, imammedo@redhat.com,
	berrange@redhat.com, jusual@redhat.com, dfaggioli@suse.com,
	joao.m.martins@oracle.com, jon.grimm@amd.com,
	santosh.Shukla@amd.com
Subject: Re: [PATCH v3 1/2] hw/i386/pc: Default to use SMBIOS 3.0 for newer machine models
Date: Sun, 4 Jun 2023 08:55:50 -0400	[thread overview]
Message-ID: <20230604085221-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20230603032255.517970-2-suravee.suthikulpanit@amd.com>

On Fri, Jun 02, 2023 at 10:22:54PM -0500, Suravee Suthikulpanit wrote:
> Currently, pc-q35 and pc-i44fx machine models are default to use SMBIOS 2.8
> (32-bit entry point). Since SMBIOS 3.0 (64-bit entry point) is now fully
> supported since QEMU 7.0, default to use SMBIOS 3.0 for newer machine
> models. This is necessary to avoid the following message when launching
> a VM with large number of vcpus.
> 
>    "SMBIOS 2.1 table length 66822 exceeds 65535"
> 
> Note that user can still override the entry point tyme w/ QEMU option
> "-M ..., smbios-entry-point-type=[32|64].
> 
> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
> ---
>  hw/i386/pc.c         |  5 ++++-
>  hw/i386/pc_piix.c    | 14 ++++++++++++++
>  hw/i386/pc_q35.c     | 14 ++++++++++++++
>  include/hw/i386/pc.h |  2 ++
>  4 files changed, 34 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index bb62c994fa..fced0ab0eb 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1770,7 +1770,10 @@ static void pc_machine_set_smbios_ep(Object *obj, Visitor *v, const char *name,
>  {
>      PCMachineState *pcms = PC_MACHINE(obj);
>  
> -    visit_type_SmbiosEntryPointType(v, name, &pcms->smbios_entry_point_type, errp);
> +    pcms->smbios_use_cmdline_ep_type =
> +        visit_type_SmbiosEntryPointType(v, name,
> +                                        &pcms->smbios_entry_point_type,
> +                                        errp);
>  }
>  
>  static void pc_machine_get_max_ram_below_4g(Object *obj, Visitor *v,
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index d5b0dcd1fe..2905b26666 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -199,6 +199,14 @@ static void pc_init1(MachineState *machine,
>      pc_guest_info_init(pcms);
>  
>      if (pcmc->smbios_defaults) {
> +        /*
> +         * Check if user has specified command line option to override

a command line

> +         * the default SMBIOS default entry point type.

default twice

> +         */
> +        if (!pcms->smbios_use_cmdline_ep_type) {
> +            pcms->smbios_entry_point_type = pcmc->default_smbios_ep_type;
> +        }
> +
>          MachineClass *mc = MACHINE_GET_CLASS(machine);
>          /* These values are guest ABI, do not change */
>          smbios_set_defaults("QEMU", mc->desc,
> @@ -453,6 +461,7 @@ static void pc_i440fx_machine_options(MachineClass *m)
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
>      pcmc->pci_root_uid = 0;
>      pcmc->default_cpu_version = 1;
> +    pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_64;
>  
>      m->family = "pc_piix";
>      m->desc = "Standard PC (i440FX + PIIX, 1996)";
> @@ -476,11 +485,16 @@ DEFINE_I440FX_MACHINE(v8_1, "pc-i440fx-8.1", NULL,
>  
>  static void pc_i440fx_8_0_machine_options(MachineClass *m)
>  {
> +    PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> +
>      pc_i440fx_8_1_machine_options(m);
>      m->alias = NULL;
>      m->is_default = false;
>      compat_props_add(m->compat_props, hw_compat_8_0, hw_compat_8_0_len);
>      compat_props_add(m->compat_props, pc_compat_8_0, pc_compat_8_0_len);
> +
> +    /* For pc-i44fx-8.0 and older, use SMBIOS 2.8 by default */
> +    pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_32;
>  }
>  
>  DEFINE_I440FX_MACHINE(v8_0, "pc-i440fx-8.0", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 6155427e48..2d1bb5fde5 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -199,6 +199,14 @@ static void pc_q35_init(MachineState *machine)
>      pc_guest_info_init(pcms);
>  
>      if (pcmc->smbios_defaults) {
> +        /*
> +         * Check if user has specified command line option to override
> +         * the default SMBIOS default entry point type.

same

> +         */
> +        if (!pcms->smbios_use_cmdline_ep_type) {
> +            pcms->smbios_entry_point_type = pcmc->default_smbios_ep_type;
> +        }
> +
>          /* These values are guest ABI, do not change */
>          smbios_set_defaults("QEMU", mc->desc,
>                              mc->name, pcmc->smbios_legacy_mode,
> @@ -359,6 +367,7 @@ static void pc_q35_machine_options(MachineClass *m)
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
>      pcmc->pci_root_uid = 0;
>      pcmc->default_cpu_version = 1;
> +    pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_64;
>  
>      m->family = "pc_q35";
>      m->desc = "Standard PC (Q35 + ICH9, 2009)";
> @@ -387,10 +396,15 @@ DEFINE_Q35_MACHINE(v8_1, "pc-q35-8.1", NULL,
>  
>  static void pc_q35_8_0_machine_options(MachineClass *m)
>  {
> +    PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> +
>      pc_q35_8_1_machine_options(m);
>      m->alias = NULL;
>      compat_props_add(m->compat_props, hw_compat_8_0, hw_compat_8_0_len);
>      compat_props_add(m->compat_props, pc_compat_8_0, pc_compat_8_0_len);
> +
> +    /* For pc-q35-8.0 and older, use SMBIOS 2.8 by default */
> +    pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_32;
>  }
>  
>  DEFINE_Q35_MACHINE(v8_0, "pc-q35-8.0", NULL,
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index c661e9cc80..f754da5a38 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -50,6 +50,7 @@ typedef struct PCMachineState {
>      bool i8042_enabled;
>      bool default_bus_bypass_iommu;
>      uint64_t max_fw_size;
> +    bool smbios_use_cmdline_ep_type;
>  
>      /* ACPI Memory hotplug IO base address */
>      hwaddr memhp_io_base;
> @@ -110,6 +111,7 @@ struct PCMachineClass {
>      bool smbios_defaults;
>      bool smbios_legacy_mode;
>      bool smbios_uuid_encoded;
> +    SmbiosEntryPointType default_smbios_ep_type;
>  
>      /* RAM / address space compat: */
>      bool gigabyte_align;


Can't we avoid this code duplication?

E.g. can't we use the pc_compat_8_0 machinery?

> -- 
> 2.34.1



  reply	other threads:[~2023-06-04 12:56 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-03  3:22 [PATCH v3 0/2] hw/i386/pc: Update max_cpus and default to SMBIOS Suravee Suthikulpanit
2023-06-03  3:22 ` [PATCH v3 1/2] hw/i386/pc: Default to use SMBIOS 3.0 for newer machine models Suravee Suthikulpanit
2023-06-04 12:55   ` Michael S. Tsirkin [this message]
2023-06-05 21:43     ` Suthikulpanit, Suravee
2023-06-03  3:22 ` [PATCH v3 2/2] pc: q35: Bump max_cpus to 1024 Suravee Suthikulpanit

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=20230604085221-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dfaggioli@suse.com \
    --cc=eduardo@habkost.net \
    --cc=imammedo@redhat.com \
    --cc=joao.m.martins@oracle.com \
    --cc=jon.grimm@amd.com \
    --cc=jusual@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=santosh.Shukla@amd.com \
    --cc=suravee.suthikulpanit@amd.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 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.