All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Alistair Francis <alistair.francis@xilinx.com>
Cc: "Marcel Apfelbaum" <marcel@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"QEMU Developers" <qemu-devel@nongnu.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: Re: [Qemu-devel] [PATCH v4 0/5] Add a valid_cpu_types property
Date: Fri, 22 Dec 2017 19:26:00 -0200	[thread overview]
Message-ID: <20171222212600.GU24025@localhost.localdomain> (raw)
In-Reply-To: <CAKmqyKP4ewwxLgQ0+fBbMzpSOA1rh23XaER-yoJQuBQOiXFPzg@mail.gmail.com>

On Fri, Dec 22, 2017 at 11:47:00AM -0800, Alistair Francis wrote:
> On Fri, Dec 22, 2017 at 10:45 AM, Alistair Francis
> <alistair.francis@xilinx.com> wrote:
> > On Wed, Dec 20, 2017 at 2:06 PM, Eduardo Habkost <ehabkost@redhat.com> wrote:
> >> On Tue, Dec 19, 2017 at 05:03:59PM -0800, Alistair Francis wrote:
> >>> On Tue, Dec 19, 2017 at 4:55 PM, Alistair Francis
> >>> <alistair.francis@xilinx.com> wrote:
> >>> > On Tue, Dec 19, 2017 at 4:43 PM, Peter Maydell <peter.maydell@linaro.org> wrote:
> >>> >> On 20 December 2017 at 00:27, Alistair Francis
> >>> >> <alistair.francis@xilinx.com> wrote:
> >>> >>> There are numorous QEMU machines that only have a single or a handful of
> >>> >>> valid CPU options. To simplyfy the management of specificying which CPU
> >>> >>> is/isn't valid let's create a property that can be set in the machine
> >>> >>> init. We can then check to see if the user supplied CPU is in that list
> >>> >>> or not.
> >>> >>>
> >>> >>> I have added the valid_cpu_types for some ARM machines only at the
> >>> >>> moment.
> >>> >>>
> >>> >>> Here is what specifying the CPUs looks like now:
> >>> >>>
> >>> >>> $ aarch64-softmmu/qemu-system-aarch64 -M netduino2 -kernel ./u-boot.elf -nographic -cpu "cortex-m3" -S
> >>> >>> QEMU 2.10.50 monitor - type 'help' for more information
> >>> >>> (qemu) info cpus
> >>> >>> * CPU #0: thread_id=24175
> >>> >>> (qemu) q
> >>> >>>
> >>> >>> $ aarch64-softmmu/qemu-system-aarch64 -M netduino2 -kernel ./u-boot.elf -nographic -cpu "cortex-m4" -S
> >>> >>> QEMU 2.10.50 monitor - type 'help' for more information
> >>> >>> (qemu) q
> >>> >>>
> >>> >>> $ aarch64-softmmu/qemu-system-aarch64 -M netduino2 -kernel ./u-boot.elf -nographic -cpu "cortex-m5" -S
> >>> >>> qemu-system-aarch64: unable to find CPU model 'cortex-m5'
> >>> >>>
> >>> >>> $ aarch64-softmmu/qemu-system-aarch64 -M netduino2 -kernel ./u-boot.elf -nographic -cpu "cortex-a9" -S
> >>> >>> qemu-system-aarch64: Invalid CPU type: cortex-a9-arm-cpu
> >>> >>> The valid types are: cortex-m3-arm-cpu, cortex-m4-arm-cpu
> >>> >>
> >>> >> Thanks for this; we really should be more strict about
> >>> >> forbidding "won't work" combinations than we have
> >>> >> been in the past.
> >>> >>
> >>> >> In the last of these cases, I think that when we
> >>> >> list the invalid CPU type and the valid types
> >>> >> we should use the same names we want the user to
> >>> >> use on the command line, without the "-arm-cpu"
> >>> >> suffixes.
> >>> >
> >>> > Hmm... That is a good point, it is confusing that they don't line up.
> >>
> >> Agreed.
> >>
> >>> >
> >>> > The problem is that we are just doing a simple
> >>> > object_class_dynamic_cast() in hw/core/machine.c which I think
> >>> > (untested) requires us to have the full name in the valid cpu array.
> >> [...]
> >>>
> >>> I think an earlier version of my previous series adding the support to
> >>> machine.c did string comparison, but it was decided to utilise objects
> >>> instead. One option is to make the array 2 wide and have the second
> >>> string be user friendly?
> >>
> >> Making the array 2-column will duplicate information that we can
> >> already find out using other methods, and it won't solve the
> >> problem if an entry has a parent class with multiple subclasses
> >> (the original reason I suggested object_class_dynamic_cast()).
> >>
> >> The main obstacle to fix this easily is that we do have a common
> >>   ObjectClass *cpu_class_by_name(const char *cpu_model)
> >> function, but not a common method to get the model name from a
> >> CPUClass.  Implementing this is possible, but probably better to
> >> do it after moving the existing arch-specific CPU model
> >> enumeration hooks to common code (currently we duplicate lots of
> >> CPU enumeration/lookup boilerplate code that we shouldn't have
> >> to).
> >>
> >> Listing only the human-friendly names in the array like in the
> >> original patch could be a reasonable temporary solution.  It
> >> won't allow us to use a single entry for all subclasses of a
> >> given type by now (e.g. listing only TYPE_X86_CPU on PC), but at
> >> least we can address this issue without waiting for a refactor of
> >> the CPU model enumeration code.
> 
> Ah, I just re-read this. Do you mean go back to the original RFC and
> just use strcmp() to compare the human readable cpu_model?

Yes, I think this would be simpler, considering that the current
users don't need the object_class_dynamic_cast() stuff.

Then whoever decide to make PC simply list TYPE_X86_CPU later
(possibly me) will need to clean up the CPU model
enumeration/lookup code and implement a
cpu_model_from_type_name() helper.

-- 
Eduardo

  reply	other threads:[~2017-12-22 21:26 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-20  0:27 [Qemu-devel] [PATCH v4 0/5] Add a valid_cpu_types property Alistair Francis
2017-12-20  0:27 ` [Qemu-devel] [PATCH v4 1/5] netduino2: Specify the valid CPUs Alistair Francis
2017-12-20  0:27 ` [Qemu-devel] [PATCH v4 2/5] bcm2836: Use the Cortex-A7 instead of Cortex-A15 Alistair Francis
2017-12-20  0:27 ` [Qemu-devel] [PATCH v4 3/5] raspi: Specify the valid CPUs Alistair Francis
2017-12-20  0:27 ` [Qemu-devel] [PATCH v4 4/5] xlnx-zcu102: " Alistair Francis
2017-12-20  0:28 ` [Qemu-devel] [PATCH v4 5/5] xilinx_zynq: " Alistair Francis
2017-12-20  0:43 ` [Qemu-devel] [PATCH v4 0/5] Add a valid_cpu_types property Peter Maydell
2017-12-20  0:55   ` Alistair Francis
2017-12-20  1:03     ` Alistair Francis
2017-12-20 22:06       ` Eduardo Habkost
2017-12-22 18:45         ` Alistair Francis
2017-12-22 19:47           ` Alistair Francis
2017-12-22 21:26             ` Eduardo Habkost [this message]
2017-12-28 13:39             ` Igor Mammedov
2017-12-28 14:59               ` Eduardo Habkost
2018-01-10 21:30                 ` Alistair Francis
2018-01-10 21:48                   ` Eduardo Habkost
2018-01-11 10:25                     ` Igor Mammedov
2018-01-11 12:58                       ` Eduardo Habkost
2018-02-01 23:21                         ` Alistair Francis

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=20171222212600.GU24025@localhost.localdomain \
    --to=ehabkost@redhat.com \
    --cc=alistair.francis@xilinx.com \
    --cc=f4bug@amsat.org \
    --cc=imammedo@redhat.com \
    --cc=marcel@redhat.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.