From: Eduardo Habkost <ehabkost@redhat.com>
To: Alistair Francis <alistair.francis@xilinx.com>
Cc: qemu-devel@nongnu.org, alistair23@gmail.com, marcel@redhat.com,
imammedo@redhat.com, f4bug@amsat.org
Subject: Re: [Qemu-devel] [PATCH v1 1/5] machine: Add a valid_cpu_types property
Date: Tue, 3 Oct 2017 17:23:45 -0300 [thread overview]
Message-ID: <20171003202345.GA4760@localhost.localdomain> (raw)
In-Reply-To: <b8474e9d2e0a219d9bac901342f983b13d009301.1507059418.git.alistair.francis@xilinx.com>
On Tue, Oct 03, 2017 at 01:05:09PM -0700, Alistair Francis wrote:
> 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>
> ---
Thanks!
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
However, I will squash the following changes before queueing,
because:
* object_class_dynamic_cast() is safe even if class is NULL,
so there's no need to validate cpu_type here.
* "must not be valid" sounds like the CPU is not allowed to be a
valid CPU, so I rewrote the comment.
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 3afc6a7b5b..36c2fb069c 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -766,9 +766,6 @@ void machine_run_board_init(MachineState *machine)
ObjectClass *class = object_class_by_name(machine->cpu_type);
int i;
- /* machine->cpu_type is supposed to be always a valid QOM type */
- assert(class);
-
for (i = 0; machine_class->valid_cpu_types[i]; i++) {
if (object_class_dynamic_cast(class,
machine_class->valid_cpu_types[i])) {
@@ -780,7 +777,7 @@ void machine_run_board_init(MachineState *machine)
}
if (!machine_class->valid_cpu_types[i]) {
- /* The user specified CPU must not be a valid CPU */
+ /* 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]);
>
> V1:
> - Use 'type' in the error message
> - Move a uneeded operation out of the for loop
> - Remove the goto
> RFC v2:
> - Rebase on Igor's cpu_type work
> - Use object_class_dynamic_cast()
> - Use a NULL terminated cahr** list
> - Do the check before the machine_class init() is called
>
>
> hw/core/machine.c | 35 +++++++++++++++++++++++++++++++++++
> include/hw/boards.h | 1 +
> 2 files changed, 36 insertions(+)
>
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 80647edc2a..3afc6a7b5b 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -758,6 +758,41 @@ 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;
> +
> + /* machine->cpu_type is supposed to be always a valid QOM type */
> + assert(class);
> +
> + 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 must not be a valid CPU */
> + 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);
> }
>
> 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);
>
> --
> 2.11.0
>
--
Eduardo
next prev parent reply other threads:[~2017-10-03 20:24 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-03 20:05 [Qemu-devel] [PATCH v1 0/5] Add a valid_cpu_types property Alistair Francis
2017-10-03 20:05 ` [Qemu-devel] [PATCH v1 1/5] machine: " Alistair Francis
2017-10-03 20:23 ` Eduardo Habkost [this message]
2017-10-03 20:26 ` Alistair Francis
2017-10-03 20:33 ` Eduardo Habkost
2017-10-03 21:37 ` Alistair Francis
2017-10-03 20:05 ` [Qemu-devel] [PATCH v1 2/5] netduino2: Specify the valid CPUs Alistair Francis
2017-10-03 20:28 ` Eduardo Habkost
2017-10-03 22:05 ` Philippe Mathieu-Daudé
2017-10-04 11:02 ` Igor Mammedov
2017-10-04 21:43 ` Alistair Francis
2017-10-04 22:21 ` Philippe Mathieu-Daudé
2017-10-05 8:38 ` Igor Mammedov
2017-10-03 20:05 ` [Qemu-devel] [PATCH v1 4/5] xilinx_zynq: : " Alistair Francis
2017-10-03 22:07 ` Philippe Mathieu-Daudé
2017-10-03 20:05 ` [Qemu-devel] [PATCH v1 5/5] raspi: " Alistair Francis
2017-10-03 20:39 ` Eduardo Habkost
2017-10-03 21:36 ` Alistair Francis
2017-10-03 22:18 ` Philippe Mathieu-Daudé
2017-10-04 3:46 ` Eduardo Habkost
[not found] ` <2a93b997d0acd369f35d68981a23ba491443daf6.1507059418.git.alistair.francis@xilinx.com>
2017-10-03 20:36 ` [Qemu-devel] [PATCH v1 3/5] xlnx-zcu102: " Eduardo Habkost
2017-10-03 21:41 ` Alistair Francis
2017-10-04 3:33 ` Eduardo Habkost
2017-10-04 11:12 ` Igor Mammedov
2017-10-04 12:28 ` Eduardo Habkost
2017-10-04 13:08 ` Igor Mammedov
2017-10-04 16:34 ` Eduardo Habkost
2017-10-04 21:39 ` Alistair Francis
2017-10-05 9:04 ` Igor Mammedov
2017-10-05 17:09 ` Eduardo Habkost
2017-10-06 8:23 ` Igor Mammedov
2017-10-06 11:45 ` Eduardo Habkost
2017-10-06 22:06 ` Alistair Francis
2017-10-09 7:12 ` Igor Mammedov
2017-10-10 15:25 ` Eduardo Habkost
2017-10-12 23:59 ` Alistair Francis
2017-10-13 3:16 ` Eduardo Habkost
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=20171003202345.GA4760@localhost.localdomain \
--to=ehabkost@redhat.com \
--cc=alistair.francis@xilinx.com \
--cc=alistair23@gmail.com \
--cc=f4bug@amsat.org \
--cc=imammedo@redhat.com \
--cc=marcel@redhat.com \
--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.