All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org, Alistair Francis <alistair.francis@xilinx.com>
Subject: [Qemu-devel] [PULL 4/9] machine: Add a valid_cpu_types property
Date: Thu,  5 Oct 2017 17:36:33 -0300	[thread overview]
Message-ID: <20171005203638.19255-5-ehabkost@redhat.com> (raw)
In-Reply-To: <20171005203638.19255-1-ehabkost@redhat.com>

From: Alistair Francis <alistair.francis@xilinx.com>

This patch add a MachineClass element that can be set in the machine C
code to specify a list of supported CPU types. If the supported CPU
types are specified the user enter CPU (by -cpu at runtime) is checked
against the supported types and QEMU exits if they aren't supported.

Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Message-Id: <b8474e9d2e0a219d9bac901342f983b13d009301.1507059418.git.alistair.francis@xilinx.com>
[ehabkost: removed assert(), rewrote comment]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/hw/boards.h |  1 +
 hw/core/machine.c   | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 156e0a5701..191a5b3cd8 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -191,6 +191,7 @@ struct MachineClass {
     bool has_hotpluggable_cpus;
     bool ignore_memory_transaction_failures;
     int numa_mem_align_shift;
+    const char **valid_cpu_types;
     void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes,
                                  int nb_nodes, ram_addr_t size);
 
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 80647edc2a..36c2fb069c 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -758,6 +758,38 @@ void machine_run_board_init(MachineState *machine)
     if (nb_numa_nodes) {
         machine_numa_finish_init(machine);
     }
+
+    /* If the machine supports the valid_cpu_types check and the user
+     * specified a CPU with -cpu check here that the user CPU is supported.
+     */
+    if (machine_class->valid_cpu_types && machine->cpu_type) {
+        ObjectClass *class = object_class_by_name(machine->cpu_type);
+        int i;
+
+        for (i = 0; machine_class->valid_cpu_types[i]; i++) {
+            if (object_class_dynamic_cast(class,
+                                          machine_class->valid_cpu_types[i])) {
+                /* The user specificed CPU is in the valid field, we are
+                 * good to go.
+                 */
+                break;
+            }
+        }
+
+        if (!machine_class->valid_cpu_types[i]) {
+            /* The user specified CPU is not valid */
+            error_report("Invalid CPU type: %s", machine->cpu_type);
+            error_printf("The valid types are: %s",
+                         machine_class->valid_cpu_types[0]);
+            for (i = 1; machine_class->valid_cpu_types[i]; i++) {
+                error_printf(", %s", machine_class->valid_cpu_types[i]);
+            }
+            error_printf("\n");
+
+            exit(1);
+        }
+    }
+
     machine_class->init(machine);
 }
 
-- 
2.13.6

  parent reply	other threads:[~2017-10-05 20:36 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-05 20:36 [Qemu-devel] [PULL 0/9] x86 and machine queue, 2017-10-05 Eduardo Habkost
2017-10-05 20:36 ` [Qemu-devel] [PULL 1/9] hw/acpi-build: Make assignment statement of next_base easy to read Eduardo Habkost
2017-11-28 15:07   ` Igor Mammedov
2017-11-29  1:07     ` Dou Liyang
2017-10-05 20:36 ` [Qemu-devel] [PULL 2/9] ACPI/unit-test: Add a new testcase for RAM allocation in numa node Eduardo Habkost
2017-11-28 15:08   ` Igor Mammedov
2017-11-29  1:06     ` Dou Liyang
2017-10-05 20:36 ` [Qemu-devel] [PULL 3/9] qom/cpu: move cpu_model null check to cpu_class_by_name() Eduardo Habkost
2017-10-05 20:36 ` Eduardo Habkost [this message]
2017-10-05 20:36 ` [Qemu-devel] [PULL 5/9] vl: Eliminate defconfig variable Eduardo Habkost
2017-10-05 20:36 ` [Qemu-devel] [PULL 6/9] qemu-options: Deprecate -nodefconfig Eduardo Habkost
2017-10-05 20:36 ` [Qemu-devel] [PULL 7/9] config: qemu_config_parse() return number of config groups Eduardo Habkost
2017-10-05 20:36 ` [Qemu-devel] [PULL 8/9] qom: update doc comment for type_register[_static]() Eduardo Habkost
2017-10-05 20:36 ` [Qemu-devel] [PULL 9/9] x86: Correct translation of some rdgsbase and wrgsbase encodings Eduardo Habkost
2017-10-06 12:17 ` [Qemu-devel] [PULL 0/9] x86 and machine queue, 2017-10-05 Peter Maydell
2017-10-06 13:45   ` Thomas Huth
2017-10-06 15:27   ` Eduardo Habkost
2017-10-06 15:37     ` Peter Maydell
2017-10-10  7:41       ` Dou Liyang
2017-10-10  9:40         ` Peter Maydell
2017-10-10 13:29           ` Dou Liyang
2017-10-10 12:52         ` Eduardo Habkost
2017-10-10 12:56           ` Peter Maydell
2017-10-10 14:17             ` Dou Liyang
2017-10-10 16:03             ` Eduardo Habkost
2017-10-10 13:07           ` Dou Liyang

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=20171005203638.19255-5-ehabkost@redhat.com \
    --to=ehabkost@redhat.com \
    --cc=alistair.francis@xilinx.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.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.