On 4/24/25 15:21, Philippe Mathieu-Daudé wrote:
Add MachineClass::get_valid_cpu_types(), a helper that
returns a dynamic list of CPU types. Since the helper
takes a MachineState argument, we know the machine is
created by the time we call it.

Suggested-by: Pierrick Bouvier <[email protected]>
Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
---
  include/hw/boards.h |  4 ++++
  hw/core/machine.c   | 26 ++++++++++++++++++++++++++
  2 files changed, 30 insertions(+)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 3573907d597..700e4f4ccf3 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -259,6 +259,9 @@ typedef struct {
   * @smbios_memory_device_size:
   *    Default size of memory device,
   *    SMBIOS 3.1.0 "7.18 Memory Device (Type 17)"
+ * @get_valid_cpu_types:
+ *    Returns a list of valid CPU types for this board. May be NULL
+ *    if not needed.
   */
  struct MachineClass {
      /*< private >*/
@@ -306,6 +309,7 @@ struct MachineClass {
      bool ignore_memory_transaction_failures;
      int numa_mem_align_shift;
      const char * const *valid_cpu_types;
+    GPtrArray *(*get_valid_cpu_types)(const MachineState *ms);
      strList *allowed_dynamic_sysbus_devices;
      bool auto_enable_numa_with_memhp;
      bool auto_enable_numa_with_memdev;
diff --git a/hw/core/machine.c b/hw/core/machine.c
index ed01798d37c..0901a92b32a 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -1581,6 +1581,32 @@ static bool is_cpu_type_supported(const MachineState 
*machine, Error **errp)
                  error_append_hint(errp, "\n");
              }
+ return false;
+        }
+    } else if (mc->get_valid_cpu_types) {

Since we'll keep both valid_cpu_types, and get_value_cpu_types, instead of doing a full replacement, would that be possible to add an assert here?

g_assert(!mc->valid_cpu_types);

and

g_assert(!mc->get_valid_cpu_types) in branch above.

This way, we make sure only one is defined.

With that,
Reviewed-by: Pierrick Bouvier <[email protected]>

Reply via email to